Chrome WebKitBlobBuilder没有't附加数据
Chrome WebKitBlobBuilder doesn't append data
我正在通过ajax请求实现一些文件上传功能。我希望能够在一个ajax调用中发送多个文件,所以我决定使用FormData。
我试图将二进制数据字符串直接附加到FormData(它很有效),但Content-Disposition没有filename属性:内容处置:表单数据;name="file1"
w3c说,我需要将一个blob对象附加到formdata以具有该属性(或者可以使用formdata.append()的第三个属性设置它)
我写了以下代码:
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);
}
它在firefox上运行得很好,但在googlechrome(v16和v17)上,请求负载是一个没有内容的表单数据:
------WebKitFormBoundaryVkgESMAGtmPMlPZ7
Content-Disposition: form-data; name="file1"; filename="file1"
Content-Type: text/plain
------WebKitFormBoundaryVkgESMAGtmPMlPZ7--
我还尝试通过ArrayBuffer填充blob,结果也是一样。我已经上网两天了,没有找到答案。我在android上发现了一个悬而未决的问题(http://code.google.com/p/android/issues/detail?id=22441)但它似乎已经死了。
这是一个真正的铬问题吗?有人对此有线索吗?还是我应该打开铬跟踪器的问题?
谢谢你的帮助!
对于任何在这里寻找解决方案的人来说,问题是切换到Blob(),而不是这里解释的BlobBuilder()
Blob生成器():
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);
Blob():
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);
tl;drChrome开发工具将从数据负载预览中剪辑文件数据。从BlobBuilder
切换到Blob
解决了这个问题,但有效载荷的预览仍然不会显示文件数据;它看起来和你发布的一样(显然是空的)。
你描述的症状是骗人的。我遇到了一个类似的问题(原来是由于Content-Type
的错误过载引起的,但我跑题了)。
当我的问题得到解决时,我注意到Chrome开发工具显示的是纯键/值数据,而不是文件数据。当上传一个大文件时,我会得到这样的东西:
------WebKitFormBoundaryHyzYwSEV4FAfvi02
Content-Disposition: form-data; name="uploadType"
media
------WebKitFormBoundaryHyzYwSEV4FAfvi02
Content-Disposition: form-data; name="fileupload"; filename="blob"
Content-Type: application/zip
------WebKitFormBoundaryHyzYwSEV4FAfvi02--
请注意,"普通"数据uploadType=media
会显示,而文件数据不会显示。我确认文件上传正确的唯一方法(而不是最终从服务器获得成功代码)是在请求完成后查看Chrome开发工具的"网络"选项卡中的请求标头。它显示了content-length: 1023235
,比假定的空文件有效载荷显示的要大得多。
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 序列化数据属性中对象的最可靠方法
- 如何将JSON数据导入我的ejs模板
- 不显示带有本地json文件数据的谷歌地图脚本
- 如何将json数据显示为html
- 画布数据到图像
- 使用jquery将mysql数据获取到新的表行中
- 使用html中的外部javascript进行数据验证
- 有时数据是't显示在浏览器中
- React中的数据集表示
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据