XMLHttpRequest.send上的NetworkError(ArrayBuffer)

时间:2016-04-13 07:56:45

标签: javascript php file-upload web-worker

我正在为一个大小为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)

0 个答案:

没有答案