【问题标题】:Correct code to upload local file to S3 proxy of API Gateway将本地文件上传到 API Gateway 的 S3 代理的正确代码
【发布时间】:2018-03-05 15:43:38
【问题描述】:

我创建了一个 API 函数来使用 S3。我导入了模板招摇。部署后,我用npm模块aws-api-gateway-client的Node.js项目进行了测试。

它适用于:获取存储桶列表,获取存储桶信息,获取一个项目,放置一个存储桶,放置一个纯文本对象,但是我被放置一个二进制文件阻止。

首先,我确保在 S3 上允许具有所有权限的 ACL。其次,还添加了二进制支持 图片/gif 应用程序/八位字节流

代码sn-p如下。行为是:

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);
        });;

    }); 

});

【问题讨论】:

    标签: amazon-s3 aws-api-gateway


    【解决方案1】:

    我们遇到了同样的问题。 API 网关适用于有限数据(目前为 10MB),此处显示限制,

    http://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html

    到 S3 的自签名 URL:

    从 lambda 或您尝试发布的端点为 POST 创建一个 S3 自签名 URL。

    How do I put object to amazon s3 using presigned url?

    现在将图像直接发布到 S3。

    预签名的 POST:

    如果您想发布其他属性,除了发布图片之外,您还可以以多种格式发布。

    http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createPresignedPost-property

    如果您想在传递到 S3 后处理文件,您可以在创建时从 S3 创建一个触发器,并使用您的 Lambda 或任何需要处理的点进行处理。

    希望对你有帮助。

    【讨论】:

    • 嗨@Kannaian,谢谢你的帮助。虽然我测试的文件只有几M或几KB,但听起来api网关有10M的限制,不符合我的要求,因为我将使用大文件。我将转向原生 S3 工作流程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2016-12-29
    • 2021-06-14
    • 2018-08-24
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多