APIゲートウェイは問題ありません。私のラムダ関数は適切なヘッダーを返さなかった。私はあなたが(すべて別名)*/*
にバイナリをサポートするコンテンツタイプを設定し、あなたのラムダ関数はtrue
にプロパティisBase64Encoded
セットを返す持っている必要が見つかったバイナリ応答を処理するための
。 base64でエンコードされ、そのように示された応答はデコードされ、バイナリとして処理され、他の要求はそのまま返されます。
/**
* This is a simple AWS Lambda function that will look for a given file on S3 and return it
* passing along all of the headers of the S3 file. To make this available via a URL use
* API Gateway with an AWS Lambda Proxy Integration.
*
* Set the S3_REGION and S3_BUCKET global parameters in AWS Lambda
* Make sure the Lambda function is passed an object with `{ pathParameters : { proxy: 'path/to/file.jpg' } }` set
*/
var AWS = require('aws-sdk');
exports.handler = function(event, context, callback) {
var region = process.env.S3_REGION;
var bucket = process.env.S3_BUCKET;
var key = decodeURI(event.pathParameters.proxy);
// Basic server response
/*
var response = {
statusCode: 200,
headers: {
'Content-Type': 'text/plain',
},
body: "Hello world!",
};
callback(null, response);
*/
// Fetch from S3
var s3 = new AWS.S3(Object.assign({ region: region }));
return s3.makeUnauthenticatedRequest(
'getObject',
{ Bucket: bucket, Key: key },
function(err, data) {
if (err) {
return err;
}
var isBase64Encoded = false;
if (data.ContentType.indexOf('image/') > -1) {
isBase64Encoded = true;
}
var encoding = '';
if (isBase64Encoded) {
encoding = 'base64'
}
var resp = {
statusCode: 200,
headers: {
'Content-Type': data.ContentType,
},
body: new Buffer(data.Body).toString(encoding),
isBase64Encoded: isBase64Encoded
};
callback(null, resp);
}
);
};
https://gist.github.com/kingkool68/26aa7a3641a3851dc70ce7f44f589350
経由:
は、ここで指定されたパスを受け取り、S3からファイルを読み込み、APIゲートウェイを経由して、それを返すラムダ関数のための簡単な要旨です