2017-09-24 71 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工作流程。 –

相關問題