【问题标题】:How to use base64 encoding on HTML5 Blob object如何在 HTML5 Blob 对象上使用 base64 编码
【发布时间】:2015-03-17 21:44:44
【问题描述】:

我正在构建一个库来“节点化”HTML5 File Api(当前处于 alpha 版本)[0],以使其适用于二进制内容并且不会遇到字符集问题,我正在使用 Buffer[1]实用程序。

但是 HTML5 File API 使用 Blob 原生对象。实际上,我使用的是 'application/octet-stream' 类型和 Buffer 编码中的 'binary' 类型。但是,我想使用 base64 来防止出现任何问题:

CoFS.prototype.writeFile = function (fileName, data, encoding, callback) {

    var self = this;

    if (Buffer.isBuffer(data)) {
        callback = encoding;
        encoding = undefined;
    } else {
        data = new Buffer(data, encoding);
    }

    this._ifready(function () {

        self.getFileEntry(fileName, {create: true, exclusive: true}, function (err, fileEntry) {

            if (err) return callback(new Error("Error getting file access " + err.message));

            fileEntry.createWriter(function(fileWriter) {

                fileWriter.onwriteend = function () {
                    callback(null);
                };

                fileWriter.onerror = function(e) {
                    callback(new Error(e.toString()));
                };

                var blob = new Blob([data.toString('binary')], {type: 'application/octet-stream'});

                fileWriter.write(blob);

            }, function () {
                callback(new Error('Error writing ' + fileName));
            }); 
        });

    });

};

精确到:

var blob = new Blob([data.toString('binary')], {type: 'application/octet-stream'});

我把 MDN 页面 [2] 变红了,但我没有看到任何关于编码的信息。

有什么办法可以完成这样的事情吗?:

var blob = new Blob([data.toString('base64')], {type: 'application/octet-stream', encoding: 'base64'});

谢谢。

【问题讨论】:

  • 如果您的目标是将二进制数据写入文件,则应使用字节数组而不是字符串。
  • 好吧,我意识到 Buffer 对象是一个 Int8Array :D

标签: javascript html blob html5-filesystem


【解决方案1】:

我意识到 Buffer 对象是从 Int8Array 扩展而来的,并且两者都是兼容的。

我现在的代码是:

var blob = new Blob(
    [data], // Data is a buffer!
    {
        type: 'application/octet-stream'
    }
);

fileWriter.write(blob);

而对于读取,我使用 readAsArrayBuffer 方法,你可以这样做:

var d = new Int8Array(arr); // When arr is arrayBuffer
var buf = new Buffer(d); // And works!

这解决了我的问题。对于转换 base64 编码的内容并在 blob 中使用,使用 Buffer,可以是:

var blob = new Blob(
    [new Buffer(cleanData, 'base64')],
    {
        type: 'application/octet-stream'
    }
);

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 2021-05-28
    • 2016-11-29
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多