我正在为一个大小为3GB或更多的文件上传例程。为此,我将文件分块并将每个文件XMLHttpRequest.send(chunk)
发送到我的服务器。
我使用网络工作者使整个过程同步,所以我也使用FileReaderSync
。
我的例程适用于小文件但是我不时会在较大的文件中出错。
异常发生在XMLHttpRequest.send(chunk)
NetworkError //至少在IE 11中
我的日志显示
*检测到缓冲区溢出* :/ usr / sbin / apache2已终止
我像这样在我的工作人员里面发送
self.onmessage = function (event)
{
// create XHR instance
var xhr = new XMLHttpRequest();
// send the file through POST
xhr.open("post", "../upload.php", false); // Sync open file
xhr.responseType = 'text';
xhr.setRequestHeader("Content-Type", "application/octet-stream; charset=UTF-8");
xhr.setRequestHeader("X-INDEX", event.data["index"]); // Chunkindex
xhr.setRequestHeader("X-CHUNKS-TOTAL", event.data["maxChunks"]); // Total chunks
xhr.setRequestHeader("X-PSEUDO-NAME", event.data["pseudoName"]); // pseudo name
xhr.setRequestHeader("X-CHUNK-SIZE", event.data["size"]); // chunk size
try {
xhr.send(event.data["content"]); // here the Exception occurs
} catch (e)
{
self.postMessage('error'); // error case
}
self.postMessage(xhr.responseText); // Return answer
};
日志中的Backtrace或Memory地图在这里没有帮助,我还没有想到什么。
更新
读取块$inputHandler = fopen('php://input', "r");
并写入文件file_put_contents($target, $inputHandler, FILE_APPEND)