我一直在使用HTML5的Blob来整合包含文件和字符串在内的大量数据。由于要发送的文件和字符串不是在程序中预先指定的,我需要将所有数据打包到JS文件中并立即发送,所以我使用javascript数据收集可用数据,然后将此数组作为参数Blob构造函数。它在Chrome和Firefox中运行良好,但在使用IE11时会抛出一个javascript错误。
@#$%。js第161行第9行未处理的异常 0x800a139e - JavaScript运行时错误:InvalidStateError
我的代码如下:
var blobPackage_array = [];
if(userType != null)
blobPackage_array.push(userType);
if(userInfo != null)
blobPackage_array.push(userInfo);
for (var i = 0; i < fileList.length; i++) {
blobPackage_array.push(fileList[i]);
}
var blobPackage = new Blob(blobPackage_array); //throw javascript runtime error
我以前怀疑IE不支持Blob,所以我测试了这个:
var blobPackage = new Blob(["test", fileList[0]]);
工作正常,没有错误。我的最后一个猜测是IE不会将blobPackage_array
识别为Blob构造函数的有效参数。但Blob没有附加方法,同时我不知道需要附加多少文件,这意味着我无法一劳永逸地构建Blob。
有没有遇到过这个?我能用什么绕过这个?我很感激任何建议。
更新!出于某种原因,我不能使用FormData
代替它,它必须是blob ...
有谁可以帮我这个?
再次更新!感谢您的回复,有一些进展。我检查了MSDN,Blob的构造函数应该是这样的:var blobObject = new Blob([new Uint8Array(array)], { type: 'image/png' });
。我试图通过此Uint8Array
构建blobPackage_array
var uint8array = new Uint8Array(blobPackage_array);
。我发现这个转换时数据丢失了。但事实上,var blobPackage = new Blob([uint8array]);
可以正常工作,没有错误。因此,我只需要修复转换问题。
答案 0 :(得分:0)
我想出来了。我是个白痴......我不认识我的原始blobPackage_array
作为有效参数,因为我附加了这些变量:
if(userType != null)
blobPackage_array.push(userType);
我只需要通过此验证userType
:
if(userType != null)
blobPackage_array.push(new String(userType));
所以,不要费心将所有数据转换为UInt8Array类型...