我正在将文件上传到服务器(在本例中为S3)。大约1MB以下的任何文件都可以。超过该大小的文件通常会失败,尽管不是每次都失败。我有这个过程适用于小文件,因此问题似乎不在于安全性,CORS,签名等。它似乎是在发送期间。
小文件工作~100%但是更大的文件不会立即失败,但会触发几个进度事件,这些事件显示正确的总字节数并增加加载的字节数。但是,在其中一些进度事件之后,它会触发错误并停止发送。一旦进入,7-8MB的文件已成功,但同一文件将在其他尝试失败。
以下是相关的代码行,尽可能多地删除了绒毛。 url是一个签名的临时PUT请求,它正在工作并传递PUT调用之前的OPTIONS预检调用。内容类型标头是必需的,因为它包含在网址的签名过程中。
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)
我尝试过不同的文件,大小,扩展名,而且除了大小之外似乎没有形成任何模式。文件的大小是一个指标,但不完全准确。基于此,我寻找超时并使它们变大(以防万一)。我确实尝试捕获onabort和ontimeout,并且没有人被解雇。
当我收到错误时,我找不到任何事件,xhr或xhr.upload来指示它停止的原因。
Chrome工具会将此尝试显示为状态为“(失败)的PUT”。
错误事件显示type =“error”但没有其他信息。此时的xhr没有显示任何内容(readyState:4,response:“”,responseText:“”,responseType:“”,responseXML:null,status:0,statusText:“”)
如果有人有任何智慧的话语提供甚至是一个牵强附会的想法,我将不胜感激。感谢。
答案 0 :(得分:0)
也许这不是ajax请求的问题,而是服务器配置的问题。您的服务器必须接受最大大小为1Mb的文件上传。
如果你在php.ini中使用php set upload_max_filesize
和post_max_size
。
/* For example */
upload_max_filesize = 10M
post_max_size = 10M