如何在 HTML5 Blob 对象上使用 base64 编码
How to use base64 encoding on HTML5 Blob object
我正在为 "nodeize" HTML5 文件 Api(目前处于 alpha 阶段)[0] 构建一个库,以使其与二进制内容一起工作并且没有字符集问题,我正在使用 Buffer[1] 实用程序。
但是 HTML5 文件 API 使用 Blob 本机对象。实际上,我使用的是缓冲区编码中的 'application/octet-stream' 和 '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 扩展而来的,两者是兼容的。
我现在的代码是:
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'
}
);
我正在为 "nodeize" HTML5 文件 Api(目前处于 alpha 阶段)[0] 构建一个库,以使其与二进制内容一起工作并且没有字符集问题,我正在使用 Buffer[1] 实用程序。
但是 HTML5 文件 API 使用 Blob 本机对象。实际上,我使用的是缓冲区编码中的 'application/octet-stream' 和 '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 扩展而来的,两者是兼容的。
我现在的代码是:
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'
}
);