[英]Is it possible to upload a PDF file through AWS API Gateway and a lambda function to a S3 bucket?
[英]Get object from S3 in AWS Lambda function and send to Api Gateway
我試圖從桶中獲取.jpg文件並將其發送回api網關。 我相信我的設置正確,因為我看到記錄的東西。 它從s3中獲取文件,gm是graphicsmagick庫。 不知道我是否正在使用它。
在lambda函數中我這樣做(很多代碼來自aws示例):
async.waterfall([
function download(next) {
console.log(srcKey);
console.log(srcBucket);
// Download the image from S3 into a buffer.
s3.getObject({
Bucket: srcBucket,
Key: srcKey
},
next);
},
function transform(response, next) {
console.log(response);
next(null, 'image/jpeg', gm(response.Body).quality(85));
},
function sendData(contentType, data, next){
console.log(contentType);
console.log(data);
imageBuffer = data.sourceBuffer;
context.succeed(imageBuffer);
}
]
);
響應頭的內容長度為:85948,這似乎不對,因為原始文件只有36kb。 誰知道我做錯了什么?
您可以輕松實現Get Image < - > API Gateway < - > Lambda < - > S3集成。
在lambda中,而不是json,返回image的base64字符串表示形式( buffer.toString('base64')
),強制API網關將字符串轉換為二進制並添加特定的Content-Type
(因此您不需要使用他們有限的二進制支持,強制您發送特定的Accept標頭)。
在AWS控制台中,轉到API網關,然后轉到相關方法並更新設置:
集成請求
方法響應
集成響應 - >標題映射 - >響應標頭 - >內容類型
從命令行,運行以下命令強制將字符串轉換為二進制。 首先,從API網關檢索rest-api-id和resource-id 。 然后,在CLI中運行(用您自己的替換rest-api-id和resource-id):
aws apigateway put-integration-response --rest-api-id <rest-api-id> --resource-id <resource-id> --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY
與Lambda
一起使用時,不應使用API Gateway
傳回二進制內容。 使用Lambda
API Gateway
設置為使用XML/JSON
數據進行響應。 詳細了解為何以及如何在這里 。
嘗試更改回調鏈,以便將修改后的圖像上傳回S3
。 成功上載后,發回目標對象的URI
並將客戶端重定向到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.