我正在上傳文件到服務器(在這種情況下,S3)。 〜1MB以下的任何文件都可以正常工作。超過該大小的文件通常會失敗,但不是每次都是。我的流程爲小文件工作,所以這個問題似乎不在於安全性,CORS,簽名等。它似乎是在發送過程中。XmlHttpRequest PUT文件上傳停止> 1MB
小文件可以工作〜100%,但即使是較大的文件也不會立即失敗,但會觸發幾個進度事件,顯示正確的總字節數和增加的字節數,因爲它們應該是這樣。但是,在這些進展事件中的一些之後,它會觸發錯誤並停止發送。一段時間後,一個7-8MB的文件已成功,但同一個文件在其他嘗試中失敗。
下面是相關的代碼行,刪除儘可能多的絨毛。該url是一個簽名的臨時PUT請求,它正在工作並傳遞PUT調用之前的OPTIONS預檢呼叫。內容類型標頭是必需的,因爲它包含在url的簽名過程中。
xhr = new XMLHttpRequest()
xhr.upload.onerror = (e) ->
console.log(xhr)
console.log(e)
xhr.onerror = (e) ->
console.log(xhr)
console.log(e)
true
xhr.open('PUT', url)
xhr.setRequestHeader('content-type', file.type)
xhr.send(file)
我試過不同的文件,大小,擴展名和那些似乎沒有形成大小以外的任何模式。文件的大小是一個指標,但不是確切的。基於此,我查找超時並將它們設置得很大(以防萬一)。我確實試圖趕上和暫停,沒有人被解僱。
當我收到錯誤信息時,我無法找到事件xhr或xhr.upload來指示停止的原因。
Chrome工具顯示嘗試作爲狀態爲'(失敗)的PUT'。
錯誤事件顯示type =「error」但沒有其他信息。 xhr在這一點上什麼也沒有(readyState:4,response:「」,responseText:「」,responseType:「」,responseXML:null,status:0,statusText:「」)
如果有人有任何的話智慧提供甚至是一個牽強的想法嘗試,我將不勝感激。謝謝。
謝謝,@ R3tep。它似乎不是一個硬性限制,因爲有些文件有時可以運行,有時卻不能運行。在簽名的url中,我沒有限制文件大小,並且我知道服務器不限制大小,因爲我可以通過他們提供的界面上傳。 –
我在stackoverflow上找到了[post](http://stackoverflow.com/questions/9004544/what-is-the-maximum-file-upload-size-with-xmlhttprequest-level-2)。它列出了使用XmlHttpRequest的所有可能的限制發送文件 – R3tep