使用JS和PHP上传分块文件

时间:2017-09-04 12:48:46

标签: javascript php html

Weyooo,

我知道这个话题已经在这里讨论了,但是当我尝试它时会发生一些奇怪的事情。这里是代码,然后我会解释发生了什么。

JS:

var Form = document.getElementById("Upload");
var FileSelect = document.getElementById("inputFile");    

Form.onsubmit = function(event) {

  event.preventDefault();

  var Blob = FileSelect.files[0];      
  const BYTES_PER_CHUNK = 1048576;
  const SIZE = Blob.size;
  var Start = 0;
  var End = BYTES_PER_CHUNK;

    while (Start < SIZE) {

      var Chunk = Blob.slice(Start, End);
      uploadFile(Chunk);
      Start = End;
      End = Start + BYTES_PER_CHUNK;

    }

};

function uploadFile(blobFile) {

  var formData = new FormData();

  formData.append("inputFile", blobFile);

    var XHR = new XMLHttpRequest();

          XHR.onload = function(e) {

            console.log("Loaded!");

          };

          XHR.onreadystatechange = function() {

            console.log(this.responseText);

          };

            XHR.open("POST", "upload.php");

            XHR.send(formData);

}

PHP:

$target_path = "storage/";
$tmp_name = $_FILES['inputFile']['tmp_name'];
$size = $_FILES['inputFile']['size'];
$name = $_FILES['inputFile']['name'];

$complete = "asd.png";
$com = fopen("storage/".$complete, "a");

$in = fopen($tmp_name, "r");

if ($in) {

  while ($buff = fread( $in, 1048576 )) {

    fwrite($com, $buff);

  }

}

fclose($in);

fclose($com);

我已经分别测试了两个代码并且工作正常。当我单独上传时,首先我上传用JS代码完成的5块1 MB,然后我将所有内容与PHP代码放在一起,就像一个魅力。

当我把所有内容放在一起并且我尝试上传文件时问题就出现了。例如,如果我拍摄5 MB大小的png图像并执行代码,结果文件将是2.32 MB图像。

因此,我想到的可能是所有问题,就是JS代码在使用PHP代码编写前一个文件之前上传了bolb文件,因此导致文件被破坏。这可能吗?有什么错误吗?谢谢!

0 个答案:

没有答案