Javascript 如何在HTML5 Blob对象上使用base64编码
我正在构建一个库来“nodeize”HTML5文件Api(目前为alpha)[0],为了使它能够处理二进制内容,并且不会出现字符集问题,我使用了Buffer[1]实用程序 但是HTML5文件API使用Blob本机对象。实际上,我使用的是“application/octetstream”类型和缓冲区编码中的“binary”。但是,为了防止出现任何问题,我希望使用base64:Javascript 如何在HTML5 Blob对象上使用base64编码,javascript,html,blob,html5-filesystem,Javascript,Html,Blob,Html5 Filesystem,我正在构建一个库来“nodeize”HTML5文件Api(目前为alpha)[0],为了使它能够处理二进制内容,并且不会出现字符集问题,我使用了Buffer[1]实用程序 但是HTML5文件API使用Blob本机对象。实际上,我使用的是“application/octetstream”类型和缓冲区编码中的“binary”。但是,为了防止出现任何问题,我希望使用base64: CoFS.prototype.writeFile = function (fileName, data, encoding
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'});
谢谢
- 0:
- 1:
- 2:
var blob = new Blob(
[data], // Data is a buffer!
{
type: 'application/octet-stream'
}
);
fileWriter.write(blob);
对于read,我使用readAsArrayBuffer方法,您可以执行以下操作:
var d = new Int8Array(arr); // When arr is arrayBuffer
var buf = new Buffer(d); // And works!
这解决了我的问题。对于转换base64编码的内容并在blob中使用,以及缓冲区,可以是:
var blob = new Blob(
[new Buffer(cleanData, 'base64')],
{
type: 'application/octet-stream'
}
);
如果您的目标是将二进制数据写入文件,那么应该使用字节数组而不是字符串