gpt4 book ai didi

javascript - AJAX 下载后直接上传文件(不存储)

转载 作者:行者123 更新时间:2023-11-30 00:32:01 25 4
gpt4 key购买 nike

我正在制作一个 JavaScript 脚本,该脚本将在所有者废弃它(并丢失所有游戏)之前基本上保存一个旧的游戏开发沙盒网站。我已经创建了一个通过 AJAX 下载每个游戏的脚本,并且想以某种方式直接上传它,也使用 AJAX。如何将下载的文件(大概存储在 responseText 中)上传到另一个域(启用了跨源 header )上的 PHP 页面?

我假设必须有一种方法可以从第一个 AJAX 请求上传数据,而不会将 responseText 传输到另一个 AJAX 请求(用于上传文件)?我已尝试传输数据,但正如预期的那样,它会导致巨大的延迟(并可能导致浏览器崩溃),因为文件可能非常大。

有没有一种方法可以让 AJAX 请求在收到单个数据包后立即以某种方式上传它们?

谢谢,

丹.

最佳答案

您可以使用 Firefox 的 moz-chunked-textmoz-chunked-arraybuffer 响应类型。在 JavaScript 方面,您可以执行如下操作:

function downloadUpload() {

var downloadUrl = "server.com/largeFile.ext";
var uploadUrl = "receiver.net/upload.php";
var dataOffset = 0;

xhrDownload = new XMLHttpRequest();
xhrDownload.open("GET", downloadUrl, true);
xhrDownload.responseType = "moz-chunked-text"; // <- only works in Firefox
xhrDownload.onprogress = uploadData;
xhrDownload.send();

function uploadData() {
var data = {
file: downloadUrl.substring(downloadUrl.lastIndexOf('/') + 1),
offset: dataOffset,
chunk: xhrDownload.responseText
};
xhrUpload = new XMLHttpRequest();
xhrUpload.open("POST", uploadUrl, true);
xhrUpload.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhrUpload.send(JSON.stringify(data));
dataOffset += xhrDownload.responseText.length;
};

}

在 PHP 方面,您需要这样的东西:

$in = fopen("php://input", "r");
$postContent = stream_get_contents($in);
fclose($in);

$o = json_decode($postContent);
file_put_contents($o->file . '-' . $o->offset . '.txt', $o->chunk);

这些片段只会给你基本的想法,你需要自己优化代码。

关于javascript - AJAX 下载后直接上传文件(不存储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29111272/

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