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文件,因此导致文件被破坏。这可能吗?有什么错误吗?谢谢!