Skip to content

Instantly share code, notes, and snippets.

@jourdein
Created April 8, 2023 08:23
Show Gist options
  • Save jourdein/889b8cf3cca43df123e3d0d71237babe to your computer and use it in GitHub Desktop.
Save jourdein/889b8cf3cca43df123e3d0d71237babe to your computer and use it in GitHub Desktop.
Image upload

Workflow for uploading image

1. Request presign_endpoint

GET /api/v1/drivers/s3/params?type=image/jpeg&filename=the_signature.jpg
  • Sample response
{
    "fields": {
        "key": "cache/fdeb8b0738fa15441bddd1903f9d49ec.jpg",
        "Content-Disposition": "inline; filename=\"the_signature.jpg\"",
        "Content-Type": "image/jpeg",
        "policy": "eyJleHBpcmF0aW9uIjoiMjAyMy0wNC0wNVQyMzozMzo0MVoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJxdWlja2JpdGUtZGV2LW1hdHQifSx7ImtleSI6ImNhY2hlL2ZkZWI4YjA3MzhmYTE1NDQxYmRkZDE5MDNmOWQ0OWVjLmpwZyJ9LHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImlubGluZTsgZmlsZW5hbWU9XCJpbmlfZ2FtYmFyX255YS5qcGdcIiJ9LHsiQ29udGVudC1UeXBlIjoiaW1hZ2UvanBlZyJ9LFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjBdLHsieC1hbXotY3JlZGVudGlhbCI6IjlsYlp2Q2U3UEZFMnRQb1EvMjAyMzA0MDUvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotZGF0ZSI6IjIwMjMwNDA1VDIyMzM0MVoifV19",
        "x-amz-credential": "9lbZvCe7PFE2tPoQ/20230405/us-east-1/s3/aws4_request",
        "x-amz-algorithm": "AWS4-HMAC-SHA256",
        "x-amz-date": "20230405T223341Z",
        "x-amz-signature": "1d039ffb0c7b96e53f7d344868b439cd05eeecf185c228e69f0f86f44a796ee8"
    },
    "headers": {},
    "method": "post",
    "url": "http://127.0.0.1:9000/quickbite-dev-matt"
}

2. Upload image to s3 directly using the presigned_endpoint

Sample using curl

curl --location 'http://127.0.0.1:9000/quickbite-dev-matt' \
--form 'key="cache/fdeb8b0738fa15441bddd1903f9d49ec.jpg"' \
--form 'Content-Disposition="inline; filename=\"the_signature.jpg\""' \
--form 'Content-Type="image/jpeg"' \
--form 'x-amz-credential="9lbZvCe7PFE2tPoQ/20230405/us-east-1/s3/aws4_request"' \
--form 'x-amz-algorithm="AWS4-HMAC-SHA256"' \
--form 'x-amz-date="20230405T223341Z"' \
--form 'x-amz-signature="1d039ffb0c7b96e53f7d344868b439cd05eeecf185c228e69f0f86f44a796ee8"' \
--form 'policy="eyJleHBpcmF0aW9uIjoiMjAyMy0wNC0wNVQyMzozMzo0MVoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJxdWlja2JpdGUtZGV2LW1hdHQifSx7ImtleSI6ImNhY2hlL2ZkZWI4YjA3MzhmYTE1NDQxYmRkZDE5MDNmOWQ0OWVjLmpwZyJ9LHsiQ29udGVudC1EaXNwb3NpdGlvbiI6ImlubGluZTsgZmlsZW5hbWU9XCJpbmlfZ2FtYmFyX255YS5qcGdcIiJ9LHsiQ29udGVudC1UeXBlIjoiaW1hZ2UvanBlZyJ9LFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjBdLHsieC1hbXotY3JlZGVudGlhbCI6IjlsYlp2Q2U3UEZFMnRQb1EvMjAyMzA0MDUvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotZGF0ZSI6IjIwMjMwNDA1VDIyMzM0MVoifV19"' \
--form 'file=@"/Users/matt/Desktop/the_signature.jpg"'

3. After successfully upload to s3, can update the API with the data

POST /api/v1/drivers/background-check
{
    "background_check": {
        "want_to_receive_consumer_report": false,
        "signed_delivery_partner_agreement": true,
        "signed_information_disclosure": true,
        "driver_license_state": "Ohio",
        "driver_license_number": "A41234423",
        "date_of_birth": "2023-03-05",
        "signature_image": {
            "id": "fdeb8b0738fa15441bddd1903f9d49ec.jpg",
            "storage": "cache_s3",
            "metadata": {
                "size": 281395,
                "filename": "the_signature.jpg",
                "mime_type": "image/jpeg"
            }
        },
        "addresses_attributes": {
            "id": "1babfe18-cf06-4de0-b9f9-9890e073bbbb",
            "street_address": "Persiaran Seksyen 3/14, Bandar Putra Bertam",
            "city": "Kepala Batas",
            "postcode": "12345",
            "state": "Pulau Pinang"
        }
    }
}

Breakdown signature_image hash field;

"storage": "cache_s3" - mesti cache_s3

"metadata.size": 281395 - calculated kat client

        "signature_image": {
            "id": "fdeb8b0738fa15441bddd1903f9d49ec.jpg",
            "storage": "cache_s3",
            "metadata": {
                "size": 281395,
                "filename": "the_signature.jpg",
                "mime_type": "image/jpeg"
            }
        },

Notes

"signed_delivery_partner_agreement": true,
"signed_information_disclosure": true,

parameter kat atas sekarang hanyalah boolean (true/false) dan bukan lagi DateTime

note juga the removal of postfix _at pada setiap field name

"signed_delivery_partner_agreement_at": "2023-03-05",
"signed_information_disclosure_at": ""2023-03-05",
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment