DataURI 到 Blob 错误:DOM 异常 5:指定了无效或非法字符
DataURI to Blob errors: DOM Exception 5: An invalid or illegal character was specified
我使用带有 Cordova 插件的 Meteor 在 iPhone 上录制视频,然后将其转换为 blob 以便上传。大约一半的时间我尝试将视频从本地文件系统转换为它可以工作的 blob,而另一半则出现此错误:
InvalidCharacterError: DOM Exception 5: An invalid or illegal character was specified, such as in an XML name.
好像一般是3秒以上的视频才会出现,但是真正短的视频就出现过。这是我的 dataURItoBlob
函数:
function dataURItoBlob(dataURI) {
var input = dataURI.replace(/\s/g, '');
var binary = atob(input.split(',')[1]);
var array = [];
for(var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {type: "video/mp4"});
}
我真的不确定我做错了什么,我已经尝试了其他几个类似的功能但没有成功。任何帮助是极大的赞赏。谢谢!
发现这是 base64 dataURI 的问题,而不是 blob 函数的问题。由于某种原因,它在尝试使用 readAsDataUrl
时被损坏了。根据 ,我通过 readAsBinaryData
解决了它并手动附加了 data:video/mp4;base64,
。
我使用带有 Cordova 插件的 Meteor 在 iPhone 上录制视频,然后将其转换为 blob 以便上传。大约一半的时间我尝试将视频从本地文件系统转换为它可以工作的 blob,而另一半则出现此错误:
InvalidCharacterError: DOM Exception 5: An invalid or illegal character was specified, such as in an XML name.
好像一般是3秒以上的视频才会出现,但是真正短的视频就出现过。这是我的 dataURItoBlob
函数:
function dataURItoBlob(dataURI) {
var input = dataURI.replace(/\s/g, '');
var binary = atob(input.split(',')[1]);
var array = [];
for(var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}
return new Blob([new Uint8Array(array)], {type: "video/mp4"});
}
我真的不确定我做错了什么,我已经尝试了其他几个类似的功能但没有成功。任何帮助是极大的赞赏。谢谢!
发现这是 base64 dataURI 的问题,而不是 blob 函数的问题。由于某种原因,它在尝试使用 readAsDataUrl
时被损坏了。根据 readAsBinaryData
解决了它并手动附加了 data:video/mp4;base64,
。