2016-06-07 106 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