XmlHttpRequest PUT文件上传停止> 1MB

时间:2014-02-13 00:03:50

标签: javascript ajax file-upload xmlhttprequest

我正在将文件上传到服务器(在本例中为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:“”)

如果有人有任何智慧的话语提供甚至是一个牵强附会的想法,我将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

也许这不是ajax请求的问题,而是服务器配置的问题。您的服务器必须接受最大大小为1Mb的文件上传。

如果你在php.ini中使用php set upload_max_filesizepost_max_size

/* For example */
upload_max_filesize = 10M
post_max_size = 10M