I trying to upload an image to S3 uses serverless
and NodeJS but something wrong after upload. In local uses serverless-offline
everything worked like champ but after deploy I got this error. Then I tried to intercept and detect what's happened and see this result:
Some strange character appeared in image body such as <0x0a>
0x01
0x04
I also tried to use serverless-apigw-binary
but not luck.
Self Answer
Very lucky I just found the solution at binary-media-types
Add this to serverless.yml
.
provider:
# others
apiGateway:
binaryMediaTypes:
- '*/*'
No need serverless-apigw-binary
No need this as well
const binaryMimeTypes = [
'image/gif',
'image/png',
'image/jpeg',
'image/jpg',
];
...
return serverless.createServer(expressApp, null, binaryMimeTypes)
Following method worked for me.
If want to upload file through lambda, one way is to open your AWS API Gateway console.
Go to
"API" -> {YourAPI} -> "Settings"
There you will find "Binary Media Types" section.
Add following media type:
multipart/form-data
Save your changes.
Then Go to "Resources" -> "proxy method"(eg. "ANY") -> "Method Request" -> "HTTP Request Headers" and add following headers "Content-Type", "Accept".
Finally deploy your api.
For more info visit: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With