这可能是因为API Gateway在处理响应时会添加额外的HTTP标头和元数据。可以通过将响应流设置为二进制,并在设置响应时手动设置Content-Type标头来解决此问题。
以下是一个使用Node.js和Serverless框架的Lambda函数示例,它通过API Gateway将S3对象返回给客户端,同时使用上述解决方法来确保响应大小与S3对象大小相同:
const AWS = require('aws-sdk');
module.exports.getObject = async (event, context) => {
const s3 = new AWS.S3();
const bucketName = '';
const key = event.pathParameters.key;
// Get the object from S3
const s3Object = await s3.getObject({ Bucket: bucketName, Key: key }).promise();
// Set binary response and Content-Type header
const response = {
statusCode: 200,
isBase64Encoded: true,
headers: {
'Content-Type': s3Object.ContentType
},
body: s3Object.Body.toString('base64')
};
return response;
};
上一篇:AWSAPIGateway返回200状态码时,没有携带错误信息而导致的问题。
下一篇:AWSAPIGateway返回TARGET_MODEL_HEADER_MISSING错误,尽管目标模型已经在请求头中传递。