好吧,标题没有给出太多方式,所以让我解释一下我非常奇怪的设置。
涉及两个服务器:
- 网站: 远程 本地
- 主机:本地计算机
工作流程如下:
- 该站点通过跨域 AJAX 调用本地主机
- 作为响应,localhost通过PHP的ZipArchive库动态创建一个ZIP文件
- localhost 将构成归档的原始数据作为 AJAX 响应进行传达
请求并提出存档 - 一切都很好。存档是可打开的,一切都很好。我现在坚持的是如何将该存档传达为 AJAX 响应,以便可以"再次组合"(如 Humpty Dumpty)。当我目前执行此操作(通过 file_put_contents()
)时,它在打开时出错,说它无效。目前,我只是输出存档的原始数据:
echo file_get_contents('path/to/archive.zip');
这很好,但在响应中发送乱码。我对编码和标头了解不多,所以如果这看起来很明显,请道歉。
对于响应,我应该希望将其转换为二进制,还是发送某些标头等?我尝试发送多部分/表单数据标头,但没有骰子。标题不是我的强项。
请注意,在这种情况下,cURL 不是一个选项,否则我会笑。
您必须使用 Blob javascript 类将 zip 文件作为二进制数据读取。
这是来自 Mozilla 文档的代码片段
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) {
var blob = new Blob([oReq.response], {type: "application/octet-stream"}); //
// you have nothing to do with the blob...
// ...
};
oReq.send();
然后使用 POST 方法将此文件 (blob) 发送到目标
var oReq = new XMLHttpRequest();
oReq.open("POST", url, true);
oReq.onload = function (oEvent) {
// Uploaded.
};
oReq.send(blob); //the blob that you loaded
您可以在Mozilla的文档中阅读更多内容:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data