javascript - 数据 :URL to Blob - issue with chromium

标签 javascript chromium

几个小时以来,我一直在为一个在这里被问过几次的问题而烦恼: 我有来自闪存录音机的二进制数据,我将其转换为 dataURL,然后想将其转换为 blob 以供上传。 SO给了我几个答案,它们本质上都是一样的:

我根据上面写了下面的代码

var data = window.atob(dataURL.split(',')[1]);
var length = data.length;
var uInt8Array = new Uint8Array(length);
for (var i = 0; i < length; ++i) {
    uInt8Array[i] = data.charCodeAt(i);
}
var myfile = new Blob([uInt8Array], {'type': 'audio/x-wav'});

这在 firefox nightly (20) 和 chrome 25 中完美运行,但 chromium 20 一直告诉我 myfile 的大小是 19 字节(当它应该是几 kb 时),并且后续上传始终失败。 这是 Chrome 中的错误,还是我错过了一个说它不受支持的文档?还有其他想法吗?

最佳答案

当使用某些参数调用时,chromium 的 Blob() 构造函数中似乎存在错误。 我缩小了问题范围 on jsfiddle (在 chromium 中运行以查看问题,其他浏览器似乎可以正确处理它,两个 blob 大小都应为 32)

这是我为解决这个问题而编写的代码:

var data = window.atob(dataURL.split(',')[1]);
var length = data.length;
var buffer = new ArrayBuffer(length);   // added this line
var uInt8Array = new Uint8Array(buffer);
for (var i = 0; i < length; ++i) {
    uInt8Array[i] = data.charCodeAt(i);
}
// two options here:
// buggy: produces a 19byte long file in chromium
var myfile = new Blob([uInt8Array], {'type': 'audio/x-wav'});
// works in chromium (and firefox), but produces a deprecation warning in chrome
var myfile = new Blob([buffer], {'type': 'audio/x-wav'});

我最终运行了第一个备选方案,然后 if (myfile.size == 19) { 如果需要则获得第二个备选方案

关于javascript - 数据 :URL to Blob - issue with chromium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841562/

相关文章:

ubuntu-18.04 - Chromium 在 Ubuntu : ERROR at//build_overrides/build. gni:5:1 上构建失败:无法加载 "/home/chromium/src/build/config/gclient_args.gni"

javascript - 如何从下面的 Javascript 控制台激活选项卡?

html - Chrome 中小型 &lt;input type ='button'> 上的 CSS Sprite

javascript - Chrome V8 错误?函数在第二次被调用后表现不同

javascript - 如何使 html 选择框在所有平台上的所有浏览器中看起来相同

javascript - 自定义 url 时重新加载页面

google-chrome - HTTP/2 服务器推送导致重复请求

javascript - Nodemon --ext 任何文件类型

javascript - 如何检测光标是否静止不动?

javascript - 在 Javascript 中将 é 转换为其原始形式