我正在制作一个JavaScript脚本,它将在所有者废弃旧游戏开发沙箱网站(并丢失所有游戏)之前,从本质上拯救它。我创建了一个脚本,通过AJAX下载每个游戏,并想以某种方式直接上传它,也使用AJAX。如何将下载的文件(可能存储在responseText中)上传到另一个域(启用了跨域标头)上的PHP页面?
我假设一定有一种方法可以上传第一个AJAX请求中的数据,而无需将responseText传输到另一个AJAX请求(用于上传文件)?我尝试过传输数据,但不出所料,它会导致巨大的延迟(并可能导致浏览器崩溃),因为文件可能非常大。
有没有一种方法让AJAX请求在收到数据包后就能以某种方式上传单个数据包?
谢谢,
丹。
发布于 2015-03-18 01:01:17
你可以使用火狐的moz-chunked-text
和moz-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);
这些代码片段只会给你一个基本的想法,你需要自己优化代码。
https://stackoverflow.com/questions/29111272
复制相似问题