【发布时间】:2015-03-09 23:22:51
【问题描述】:
我正在编写一个 Chrome 扩展程序,并且需要构建一个自定义表单数据来将一个 Zip 文件(我不能使用真正的 HTML 表单)上传到服务器(不是我的)。 我在这里找到了一种方法- https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/Sending_forms_through_JavaScript(最后一节 - 处理二进制数据)。
它适用于明文文件,但我想发送二进制的 Zip。
似乎JavaScript无法处理二进制和非二进制的连接,并在我的文件中添加了一些0Xc2字符)-:
我还在http://footle.org/2007/07/31/binary-multipart-posts-in-javascript/找到了解决方案,
但它使用Components.classes["@mozilla.org/io/string-input-stream;1"],在Chrome扩展程序中不可用。
如何将二进制 zip 文件与字符串连接起来并将其上传到服务器?
function sendData(zipBinary) {
var XHR = new XMLHttpRequest();
var boundary = "----WebKitFormBoundary3n9vu9ZOkCPW4HAw";
var prefix = "";
var postfix = "";
prefix += "--" + boundary + "\r\n";
prefix += 'content-disposition: form-data; '
+ 'name="' + 'UploadedFile' + '"; '
+ 'filename="' + 'hello.zip' + '"\r\n';
prefix += 'Content-Type: ' + 'application/x-zip-compressed' + '\r\n';
prefix += '\r\n';
postfix += '\r\n';
// Once we are done, we "close" the body's request
postfix += "--" + boundary + "--";
postfix += '\r\n';
XHR.addEventListener('load', function(event) {
alert('Yeah! Data sent and response loaded.');
});
XHR.addEventListener('error', function(event) {
alert('Oups! Something goes wrong.');
});
XHR.open('POST', 'https://example.com');
XHR.setRequestHeader('Content-Type','multipart/form-data; boundary=' + boundary);
XHR.send(prefix + zipBinary + postfix); // <----
}
【问题讨论】:
标签: javascript google-chrome-extension xmlhttprequest binaryfiles multipartform-data