Javascript XmlHttpRequest PUT文件上载停止>;1MB
我正在将文件上载到服务器(在本例中为S3)。任何小于1MB的文件都可以正常工作。超过该大小的文件通常会失败,尽管不是每次都失败。我有处理小文件的流程,所以问题似乎不在于安全性、CORS、签名等,而是在发送过程中 小文件可以100%工作,但更大的文件也不会立即失败,但会触发两个进度事件,显示正确的总字节数并增加加载的字节数。但是,在一些进度事件之后,它会触发错误并停止发送。偶尔会有一个7-8MB的文件成功,但在其他尝试中,同一个文件将失败 下面是相关的代码行,其中尽可能多地去除了绒毛。url是一个已签名的临时PUT请求,该请求正在工作并传递PUT调用之前的OPTIONS飞行前调用。内容类型标头是必需的,因为它包含在url的签名过程中Javascript XmlHttpRequest PUT文件上载停止>;1MB,javascript,ajax,file-upload,xmlhttprequest,Javascript,Ajax,File Upload,Xmlhttprequest,我正在将文件上载到服务器(在本例中为S3)。任何小于1MB的文件都可以正常工作。超过该大小的文件通常会失败,尽管不是每次都失败。我有处理小文件的流程,所以问题似乎不在于安全性、CORS、签名等,而是在发送过程中 小文件可以100%工作,但更大的文件也不会立即失败,但会触发两个进度事件,显示正确的总字节数并增加加载的字节数。但是,在一些进度事件之后,它会触发错误并停止发送。偶尔会有一个7-8MB的文件成功,但在其他尝试中,同一个文件将失败 下面是相关的代码行,其中尽可能多地去除了绒毛。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)
我尝试过不同的文件、大小和扩展名,这些文件除了大小之外似乎没有形成任何模式。文件的大小是一个指标,但并不精确。基于此,我寻找超时时间,并将其设置得更大(以防万一)。我确实试着抓住onabort和ontimeout,但两人都没有被解雇
当我得到错误时,我找不到事件的任何内容,xhr或xhr.upload来指示它停止的原因
Chrome tools将尝试显示为状态为“(失败)”的PUT
错误事件显示type=“error”,但不显示其他信息。此时的xhr不显示任何内容(readyState:4,response:,responseText:,responseType:,responseXML:null,status:0,statusText:)
如果有人有任何智慧的话可以提供,甚至是一个牵强的想法可以尝试,我将不胜感激。谢谢。也许这不是ajax请求的问题,而是服务器配置的问题。您的服务器必须接受最大大小为1Mb的文件上载 如果在php.ini中使用php set
upload_max_filesize
和post_max_size
/* For example */
upload_max_filesize = 10M
post_max_size = 10M
谢谢,@R3tep。这似乎不是一个硬限制,因为有些文件有时有效,有时无效。在签名的url中,我没有限制文件大小,我知道服务器没有限制文件大小,因为我可以通过他们提供的界面上传到那里。我在stackoverflow上发现了这一点。它列出了使用XmlHttpRequest发送文件的所有可能限制