从JS FileReader

时间:2017-10-23 16:03:30

标签: javascript php file-upload filereader

我目前正在开发一个文件大小上传限制为32 MB的PHP网站(在我不允许更改的php.ini文件中设置),因此我当前的计划是以32 MB的方式解析文件在Javascript中客户端上的块并将这些块上传到我们的PHP服务器,在那里重新组装它们。我使用FileReader API执行此操作,如this post中所述。

但是,我在PHP服务器上收到的文件(在$ _FILES中)的错误0和大小为0,即使我提交的文件大小远低于32 MB。

我的回调函数(在alediafaria的回答代码中用作回调())如下:

var chunkDoneCallback = function(res, filename, count, total_count, filetype) { 
    var renamedFile = new File([res], count + "_" + total_count + "_" + filename, {type: filetype});
    console.log('Filename ' + renamedFile.name + ' (' + renamedFile.size + ' bytes)');
    console.log(renamedFile);
    var form_data = new FormData();                  
    form_data.append('testfile_chunk', renamedFile);
    var req = new XMLHttpRequest();
    req.onreadystatechange = function() {//Call a function when the state changes.
        if(req.readyState == XMLHttpRequest.DONE && req.status == 200) {
            // Request finished. Do processing here.
            console.log(req.response);
        }
     }
     req.open("POST", <?php  echo "\"".$_SERVER['PHP_SELF']."\"";?>);
     req.send(form_data);
}

这表明renamedFile对象具有正确的名称和大小,但PHP端的文件具有正确的名称和0大小。如果我在这里使用完全相同的XMLHttpRequest代码上传原始的完整文件(假设它当然在32 MB以下),它会以正确的大小上传。如果我使用AJAX代替XMLHttpRequest,则会出现相同的错误。

我在网上看到的关于错误0和大小0的每个答案似乎都表明php.ini最大文件大小限制存在问题,但即使是非常小的文件,我也能看到这个问题。我尝试过更小的块大小,更改请求中的MIME类型等等都没有成功。

感觉FileReader的使用方式是一个问题,但我在其文档中看不到与此相关的任何内容。有任何想法吗?谢谢!

0 个答案:

没有答案