AJAX / PHP-以纯JavaScript分段上传大文件

你好234

我试图让用户使用PHP和HTML / JS上传约1GB的大文件。从过去的经验中我知道,上传文件〜10mb也会导致PHP拒绝请求。

问题是,我的js中的请求已发送,但我不知道如何通过php发送blob。发布请求始终为空

我的JavaScript是这样的:

    var xhttp = new XMLHttpRequest();
function doThing(){
      var file = document.getElementById("file_upload").files[0];
      var chunkSize = 1024 * 1024;
      var fileSize = file.size;
      var chunks = Math.ceil(file.size/chunkSize,chunkSize);
      var chunk = 0;

      console.log('file size..',fileSize);
      console.log('chunks...',chunks);
      sendFileSlice(file, chunkSize, chunk, chunks); 
}

function sendFileSlice(file, chunkSize, chunk, chunks)
{
      if(chunk <= chunks)
      {
          var offset = chunk*chunkSize;
          xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
             chunk++;
             sendFileSlice(file, chunkSize, chunk, chunks);
            }
          };
          xhttp.open("POST", "printchunks.php", true);
          xhttp.send(file.slice(offset,offset+chunkSize));
      }
}

而我的php(仅用于测试)如下所示:

<?php
//temporarily just put contents into a random file
file_put_contents(time()+rand(), print_r($_POST, true));
?>

我使用使用Javascript将文件拆分为块作为拆分示例,但是我无法使用纯Javascript找到AJAX。我不需要JQuery,这是我需要的最后一件事,我只想将blob发送到PHP,以便可以将其附加到文件中。这似乎在拆分方面有效,只是生成的文件中没有任何内容

你好234

我忘了我必须使用

xhttp.setRequestHeader('Content-Type', 'application/octet-stream');

在发送之前将流设置为blob。有了这个,我现在可以使用以下PHP保存文件:

<?php
file_put_contents(time()+rand(), file_get_contents("php://input"));
?>

当然,这会将其保存到随机文件中,因此,如果对任何人有帮助,请更改代码以适合您的需求

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章