IE11与Blob构造函数& javascript数组

时间:2015-10-15 08:50:46

标签: javascript jquery internet-explorer blob

我一直在使用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]);可以正常工作,没有错误。因此,我只需要修复转换问题。

1 个答案:

答案 0 :(得分:0)

我想出来了。我是个白痴......我不认识我的原始blobPackage_array作为有效参数,因为我附加了这些变量:

if(userType != null)
    blobPackage_array.push(userType);

我只需要通过此验证userType

if(userType != null)
    blobPackage_array.push(new String(userType));

所以,不要费心将所有数据转换为UInt8Array类型...