2016-06-07 160 views
3

正如书名,我似乎无法得到它的工作,我是继高级别指导详细here但上传过任何的图像似乎是空白。上传到S3存储通过API网关AWS服务代理

我已经设置了:

/images/{object} - PUT 
> Integration Request 
    AWS Region: ap-southeast-2 
    AWS Service: S3 
    AWS Subdomain [bucket name here] 
    HTTP method: PUT 
    Path override: /{object} 
    Execution Role [I have one set up] 
> URL Path Paramaters 
    object -> method.request.path.object 

我试图用邮差送与内容类型PUT请求:图像/ PNG和身体是一个png文件的二进制上传。

我使用curl也尝试:

curl -X PUT -H "Authorization: Bearer [token]" -H "Content-Type: image/gif" --upload-file ~/Pictures/bart.gif https://[api-url]/dev/images/cool.gif 

它在服务器上创建文件和大小似乎是双重曾被上传什么,看的时候我只是得到“的形象有一个错误”。

当我试着使用.txt文件(内容类型:text/plain的),似乎工作,虽然。

任何想法?

+0

是否在S3实际创建也有正确的内容类型,如控制台显示的对象? S3中的ETag是否与原始文件的md5哈希匹配? –

+0

内容类型似乎是相同的,一个MD5不匹配的ETag ...有趣 – csilk

+0

另外,本地文件的MD5不匹配上传文件的MD5(如果我下载一遍),只是试图.txt文件,他们似乎工作:| – csilk

回答

2

在阅读很多并与AWS技术支持人员聊天时,问题似乎是您无法通过API网关进行二进制上传,因为任何通过自动传递的内容都会通过UTF-8编码。

有为了这个,我能想到的,我的解决方案将上传前为Base64文件和触发拉姆达当他们击中桶来解码

+1

我不确定这是否适用于您的情况,但在本文档的底部:http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating -api-with-aws-services-s3.html ......有一个提示:“要上传或下载图像,需要将内容处理设置为CONVERT_TO_BINARY。” – Matt

0

这是一个老帖子几个解决方法,但我有一个解决方案。 AWS现在支持通过APIGateway READ进行二进制上传。

通常,转到您的API设置并添加二进制媒体类型。

之后,你可以处理的文件为Base64

相关问题