gpt4 book ai didi

javascript - 使用 XmlHttpRequest : Streaming? 发送文件

转载 作者:可可西里 更新时间:2023-11-01 01:51:15 26 4
gpt4 key购买 nike

我正在尝试通过拖放上传大文件。我有这段 Javascript 代码:

xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('X-File-Name', file.name);
xhr.setRequestHeader('X-File-Size', file.size);
xhr.setRequestHeader('Content-Type', file.type);
xhr.send(file);

其中 url 是目标 url 的字符串,file 是我在之后检索到的 Blob(根据 http://www.w3.org/TR/XMLHttpRequest2/#the-send-method)文件拖放。此代码适用于 Chrome 12、Safari 5 和 Firefox 4,并在 HTTP 请求正文中发送文件的原始内容。

但是,如果文件足够大,则永远不会发送请求。相反,XMLHttpRequest 对象会触发错误事件(没有任何有用的消息)。这个限制在我的环境中是 86Mb,但它因机器而异。

Chrome 的 javascript 控制台显示消息:

POST http://localhost/xfiles/xfiles.php undefined (undefined)

这与我的代码无关(它适用于较小的文件)。

浏览器似乎在发送之前读取了内存中的整个文件。可能存在内存不足异常或类似的停止进程的异常。无论如何,都没有发送HTTP请求,所以可以肯定服务器的限制与此问题无关。

无论如何,读取整个文件是一种资源浪费

是否有任何方法可以以流方式逐字节发送文件,而不必先将其存储在内存中?

最佳答案

尝试使用 Blob.slice方法将 Blob 分成多个 block ,并将每个 block 作为单独的请求发送。

关于javascript - 使用 XmlHttpRequest : Streaming? 发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com