Seb*_*ien 5 javascript ajax binary webkit xmlhttprequest
我正在通过ajax请求实现一些文件上传功能.我希望能够在一个ajax调用中发送多个文件,所以我决定使用FormData.
我试图将我的二进制数据字符串直接附加到FormData(并且它可以工作),但Content-Disposition没有文件名属性:Content-Disposition:form-data; NAME = "文件1"
w3c说我需要将一个blob对象附加到formdata以具有该属性(或者能够使用FormData.append()的3rd属性设置它)
我写了以下代码:
function uploadAsBinary() {
var xhr = new XMLHttpRequest();
var fd = new FormData();
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
var bb = new window.BlobBuilder();
bb.append("this is my binary content");
var blob = bb.getBlob("text/plain");
fd.append("file1", blob, "file1");
xhr.open("POST", "/mb/0/", false);
xhr.send(fd);
}
Run Code Online (Sandbox Code Playgroud)
它与firefox完全兼容,但是使用谷歌浏览器(v16和v17),请求有效负载是一个没有内容的formdata:
------WebKitFormBoundaryVkgESMAGtmPMlPZ7
Content-Disposition: form-data; name="file1"; filename="file1"
Content-Type: text/plain
------WebKitFormBoundaryVkgESMAGtmPMlPZ7--
Run Code Online (Sandbox Code Playgroud)
我也尝试通过ArrayBuffer填充blob,结果相同.我已经在网上冲浪了2天,我找不到答案.我在Android上发现了一个未解决的问题(http://code.google.com/p/android/issues/detail?id=22441),但它似乎已经死了.
这是一个真正的铬问题吗?有人对此有所了解,还是应该在铬跟踪器上打开一个问题?
谢谢你的帮助!
对于在这里寻找解决方案的人来说,问题是切换到 Blob() 而不是 BlobBuilder(),如此处所述
斑点生成器():
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
window.MozBlobBuilder || window.MSBlobBuilder;
window.URL = window.URL || window.webkitURL;
var bb = new BlobBuilder();
bb.append('body { color: red; }');
var blob = bb.getBlob('text/css');
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = window.URL.createObjectURL(blob);
document.body.appendChild(link);
Run Code Online (Sandbox Code Playgroud)
斑点():
window.URL = window.URL || window.webkitURL;
var blob = new Blob(['body { color: red; }'], {type: 'text/css'});
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = window.URL.createObjectURL(blob);
document.body.appendChild(link);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4663 次 |
最近记录: |