2017-09-24 26 views
0

我创建了一个API函数来与S3一起工作。我导入了模板招摇。部署完成后,我使用npm模块aws-api-gateway-client对Node.js项目进行了测试。将本地文件上传到API网关S3代理的正确代码

它可以很好地工作:获取桶列表,获取桶信息,获取一个项目,放入一个桶,放入一个纯文本对象,但是我被封锁了一个二进制文件。

首先,我确保ACL在S3上具有所有权限。其次,二进制支持还添加 图像/ GIF 应用/八位字节流

enter image description here

的代码片段如下所示。其行为如下:

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

    }); 

}); 

回答

1

我们遇到了同样的问题。 API网关是为这里显示的数据有限(10MB截至目前),限制

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

自签名网址S3:

从拉姆达创建S3自签名的网址为POST或您尝试发布的端点。

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后,要将文件过程中,您可以在创建和处理与您的拉姆达或anypoint需要处理创建S3的触发器。

希望它有帮助。

+0

Hi @Kannaian,谢谢你的帮助。尽管我测试的文件只有几M或几KB,但听起来API网关具有10M的这种限制,这将不符合我的要求,因为我将使用大文件。我将转向本地S3工作流程。 –

相关问题