簡體   English   中英

Amazon S3 CORS PUT失敗

[英]Amazon S3 CORS PUT fails

我正在嘗試使用REST Api和HTML5文件切片將大文件(1.5GB)上傳到Amazon S3。 以下是上傳代碼的樣子(為了便於閱讀而刪除了代碼):

File.prototype.slice = File.prototype.webkitSlice || File.prototype.mozSlice || File.prototype.slice;

var length = u.settings.chunk_size; // 6MB
var start = chunk * length;
var end = Math.min(start + length, u.file.size);

var xhr = new XMLHttpRequest();
var path = "/" + u.settings.key;

path += "?partNumber=" + chunk + "&uploadId=" + u.upload_id;

var method = "PUT";
var authorization = "AWS " + u.settings.access_key + ":" + signature;
var blob = u.file.slice(start, end);

xhr.upload.addEventListener("progress", progress_handler, true);
xhr.addEventListener("readystatechange", handler, true);
xhr.addEventListener("error", error_handler, true);
xhr.addEventListener("timeout", error_handler, true);

xhr.open(method, u.settings.host + path, true);

xhr.setRequestHeader("x-amz-date", date);
xhr.setRequestHeader("Authorization", authorization);
xhr.setRequestHeader("Content-Type", u.settings.content_type);
xhr.setRequestHeader("Content-Disposition", "attachment; filename=" + u.file.name);

xhr.send(blob);

chunk_size是6MB。 塊完成上傳后,下一個塊跟隨,依此類推。 但有時候(每80塊左右), PUT請求失敗, e.type == "error"e.target.status == 0 (令我驚訝), e.target.responseText == "" 塊失敗后,代碼會重新嘗試上傳它,並獲得完全相同的錯誤。 當我刷新頁面並繼續上傳(相同的塊!)時,它就像一個魅力(80塊左右,當它再次卡住時)。 以下是Chrome開發工具中請求的外觀:

在此輸入圖像描述在此輸入圖像描述在此輸入圖像描述

任何想法為什么會發生這種情況,或者如何調試這樣的東西?

編輯:這是OPTIONS回復:

在此輸入圖像描述

我終於通過嗅探數據包找到了這個問題:有兩個問題:

  1. 對於獲得4xx PUT請求(未測試其他非2xx響應),xhr請求返回為中止(狀態= 0); 仍然沒有找到解釋,請查看為什么PUT 403顯示為已中止?

  2. Amazon S3回復了403 ,表示RequestTimeTooSkewed ,因為我的簽名是在上傳開始時生成的,15分鍾后(觸發RequestTimeTooSkewed錯誤的超時),它失敗了,簽名必須重新生成。 由於第一個問題,在開發工具控制台或js代碼中從未見過403錯誤。

重新生成簽名后,一切都像魅力一樣。

您是否驗證了瀏覽器是否正在發出任何“OPTIONS”請求。 如果是,響應標頭是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM