2017-06-14 280 views
1

我想直接在瀏覽器中從S3下載文件。我正在使用AWS Javascript SDK和NodeJS + Webpack。AWS S3通過瀏覽器直接下載文件

我能夠發出GetObject請求,並可以在「開發人員工具」視圖中看到瀏覽器(Chrome)下載字節。

我有「內容處理」頭響應設置爲:

Content-Disposition:attachment; filename="A1.jpeg" 

但是我沒有看到「另存爲」,在我的文件系統中創建對話框或任何文件(下載文件夾)。字節在哪裏?

如何將數據保存到文件中?

這裏是我的代碼:

var getObject = function getObject(bucketName, fileName) { 

    var params = { 
     Bucket: bucketName, 
     Key: fileName, 
     ResponseContentDisposition: 'attachment; filename="' + fileName + '"' 
    }; 

    return s3.getObject(params).promise(); 

} 

getObject(BUCKET_NAME, item) 
.then(
    function (getFileResponse) { 
     console.log(" file downloaded.. "); 
    } 
    , 
    function(error) { 
     // Common error handling 
     console.log(" error = " + error); 
}) 
+0

你可以發佈你的GetObject請求嗎? – Nickel

+0

@Nickel:用我的代碼更新了問題.. – Manish

回答

1

我之前遇到過這種情況,然後我用 「s3.getSignedUrl」 功能,而不是 「s3.getObject」 如下:

s3.getSignedUrl('putObject',s3Params).then(function(url){ 
    //the returned "url" used by the browser to download 
},function(error){ 
    //Error handling 
}) 

和s3Params將包含(Buckey,鍵「對象名稱」等)

+0

這聽起來很有趣..我的文件將會很大(以GB爲單位)。在用戶開始下載的情況下會發生什麼 - 簽名URL只需啓動下載,或者在整個下載過程中持續下去? – Manish

+0

也可以通過開發人員工具嗅探該URL?如果沒有授權的其他用戶也可以下載該文件.. – Manish

+0

與授權問題相關,在我的情況下,只有在生成url時才需要授權,但是可以生成該url的用戶有另一個自定義授權。 –