我创建了一个API函数来使用S3。我导入了模板招摇。部署之后,我通过npm模块aws-api-gateway-client测试了Node.js项目。
它适用于:获取存储桶列表,获取存储桶信息,获取一个项目,放入存储桶,放置纯文本对象,但是我被阻止放入二进制文件。
首先,我确保ACL具有S3上的所有权限。其次,二进制支持也增加了 图像/ GIF application / octet-stream
代码段如下。行为是:
1)在invokeAPI之后,回调函数永远不会被命中,经过一段时间后,Node.js项目没有响应。没有任何错误消息。文件大小(例如图像)非常小。 2)只有两次,上传似乎有效,但结果文件大小比原始文件大(大约2M),因此文件已损坏。
你可以帮帮我吗?谢谢!var filepathname = './items/';
var filename = 'image1.png';
fs.stat(filepathname+filename, function (err, stats) {
var fileSize = stats.size ;
fs.readFile(filepathname+filename,'binary',function(err,data){
var len = data.length;
console.log('file len' + len);
var pathTemplate = '/my-test-bucket/' +filename ;
var method = 'PUT';
var params = {
folder: '',
item:''
};
var additionalParams = {
headers: {
'Content-Type': 'application/octet-stream',
//'Content-Type': 'image/gif',
'Content-Length': len
}
};
var result1 = apigClient.invokeApi(params,pathTemplate,method,additionalParams,data)
.then(function(result){
//never hit :(
console.log(result);
}).catch( function(result){
//never hit :(
console.log(result);
});;
});
});
答案 0 :(得分:1)
我们遇到了同样的问题。 API网关适用于有限的数据(截至目前为10MB),此处显示限制
http://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
自签名到S3的网址:
从lambda或您尝试发布的端点为POST创建一个S3自签名URL。
How do I put object to amazon s3 using presigned url?
现在将图像直接发布到S3。
Presigned POST:
如果您想发布其他属性,除了发布图片外,您也可以将其发布为多格式格式。
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createPresignedPost-property
如果要在传送到S3后处理文件,可以在创建时使用S3创建触发器,并使用您的Lambda或需要处理的任何点进行处理。
希望它有所帮助。