gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:05:12 27 4
gpt4 key购买 nike

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

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

我的 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));
?>

我正在使用 Splitting a File into Chunks with Javascript这是拆分的示例,但我找不到使用纯 Javascript 的 AJAX。我不需要 JQuery,这是我最不需要的东西,我只想向 PHP 发送一个 blob,以便它可以将其附加到文件中。这似乎在拆分方面有效,它只是在生成的文件中没有任何内容

最佳答案

我忘了我必须使用

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

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

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

当然这会将它保存到一些随机文件中,所以如果这对任何人有帮助,请更改代码以满足您的需要

关于javascript - AJAX/PHP - 以纯 javascript 分段上传大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com