我试图让用户使用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,以便可以将其附加到文件中。这似乎在拆分方面有效,只是生成的文件中没有任何内容
我忘了我必须使用
xhttp.setRequestHeader('Content-Type', 'application/octet-stream');
在发送之前将流设置为blob。有了这个,我现在可以使用以下PHP保存文件:
<?php
file_put_contents(time()+rand(), file_get_contents("php://input"));
?>
当然,这会将其保存到随机文件中,因此,如果对任何人有帮助,请更改代码以适合您的需求
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句