首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AJAX下载后直接上传文件(不存储)

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

Stack Overflow用户
提问于 2015-03-17 22:56:40
回答 1查看 83关注 0票数 2

我正在制作一个JavaScript脚本,它将在所有者废弃旧游戏开发沙箱网站(并丢失所有游戏)之前,从本质上拯救它。我创建了一个脚本,通过AJAX下载每个游戏,并想以某种方式直接上传它,也使用AJAX。如何将下载的文件(可能存储在responseText中)上传到另一个域(启用了跨域标头)上的PHP页面?

我假设一定有一种方法可以上传第一个AJAX请求中的数据,而无需将responseText传输到另一个AJAX请求(用于上传文件)?我尝试过传输数据,但不出所料,它会导致巨大的延迟(并可能导致浏览器崩溃),因为文件可能非常大。

有没有一种方法让AJAX请求在收到数据包后就能以某种方式上传单个数据包?

谢谢,

丹。

EN

回答 1

Stack Overflow用户

发布于 2015-03-18 01:01:17

你可以使用火狐的moz-chunked-textmoz-chunked-arraybuffer响应类型。在JavaScript端,您可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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端,您需要类似以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29111272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文