2017-07-31 118 views
1

我們上傳了一些文本文件到S3,我們希望通過API網關使用Lambda函數下載這些文件,我們進行了以下配置。通過AWS Lambda和API網關下載Amazon S3的文本文件

例如,在這種情況下,文件download.txt包含此內容 在描述性寫作中,作者沒有告訴讀者看到,感受,測試,聞到或聽到什麼。相反,他介紹了一些他經歷過......

  1. lambda函數響應從S3在這種情況下,該文件的字節是一個txt文件

    SW4gZGVzY3JpcHRpdmUgd3JpdGluZywgdGhlIGF1dGhvciBkb2VzIG5vdCB0ZWxsIHRoZSByZWFkZXIgd2hhdCB3YXMgc2VlbiwgZmVsdCwgdGVzdGVkLCBzbWVsbGVkLCBvciBoZWFyZC4gIFJhdGhlciwgaGUgZGVzY3JpYmVzIHNvbWV0aGluZyB0aGF0IGhlIGV4cGVyaWVuY2VkIGFuZCwgdGhyb3VnaCBoaXMg ...

  2. 配置的方法響應和整合API網關 Method Response Integration Resonse

  3. 用所需參數執行API網關測試。

    在描述性寫作中,作者沒有告訴讀者看到,感受,測試,聞到或聽到什麼。相反,他介紹了一些他經歷過......

響應從S3文件的內容,但是當我們在瀏覽器中執行API網關這個返回一個txt文件,但這個內容是返回lambda函數 的字節,並且應該與API網關測試中測試的響應相同。

執行API網關在瀏覽器

https://xxxxxx.execute-api.us-west-2.amazonaws.com/file/download?key=download.txt&bucketName=xxxxxxxxxxxxxxxxxxxx&isMultipart=false 

文件內容是

SW4gZGVzY3JpcHRpdmUgd3JpdGluZywgdGhlIGF1dGhvciBkb2VzIG5vdCB0ZWxsIHRoZSByZWFkZXIgd2hhdCB3YXMgc2VlbiwgZmVsdCwgdGVzdGVkLCBzbWVsbGVkLCBvciBoZWFyZC4gIFJhdGhlciwgaGUgZGVzY3JpYmVzIHNvbWV0aGluZyB0aGF0IGhlIGV4cGVyaWVuY2VkIGFuZCwgdGhyb3VnaCBoaXMg... 

你是否有應接收到正確的內容文件的任何想法?

謝謝

+1

您的內容採用base64編碼。看看[這個AWS文檔](http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html)來幫助進行類型之間的轉換。 – stdunbar

+0

爲什麼不在你的lambda中返回使用s3Client.getObjectAsString?另外,在「集成響應」中,您是否將內容處理設置爲「轉換爲文本」?最後,如果你沒有用JSON響應,請確保將內容類型設置爲'text/plain' – zachdb86

回答

0

您應該能夠使用Buffer.from爲了您的base64數據轉換成二進制。

從那裏你可以上傳到S3或作爲迴應使用API​​網關發回。

注意:我假設您的Lambda函數是用Node編寫的。否則,您應該可以在其他語言中應用相同的方法。

+0

我使用java工作,lambda函數返回文件的字節(byte []),在測試中API網關工作正常,因爲在S3中顯示文件的真實內容,但是在瀏覽器中返回的文件的內容中,內容不好,因爲顯示了字節。任何想法爲什麼發生這種情況 –