You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

60 lines
1.7 KiB

var isStr = require('./isStr');
var base64 = require('./base64');
var isArrBuffer = require('./isArrBuffer');
var isArr = require('./isArr');
var isBuffer = require('./isBuffer');
var type = require('./type');
var lowerCase = require('./lowerCase');
exports = function(bin, t) {
var result;
t = lowerCase(t);
if (isStr(bin)) {
result = new Uint8Array(base64.decode(bin));
} else if (isArrBuffer(bin)) {
bin = bin.slice(0);
result = new Uint8Array(bin);
} else if (isArr(bin)) {
result = new Uint8Array(bin);
} else if (type(bin) === 'uint8array') {
result = bin.slice(0);
} else if (isBuffer(bin)) {
result = new Uint8Array(bin.length);
for (var i = 0; i < bin.length; i++) {
result[i] = bin[i];
}
}
if (result) {
switch (t) {
case 'base64':
result = base64.encode(result);
break;
case 'arraybuffer':
result = result.buffer;
break;
case 'array':
result = [].slice.call(result);
break;
case 'buffer':
result = Buffer.from(result);
break;
case 'blob':
result = new Blob([result.buffer]);
break;
}
}
return result;
};
exports.blobToArrBuffer = function(blob) {
return new Promise(function(resolve, reject) {
var fileReader = new FileReader();
fileReader.onload = function(e) {
resolve(e.target.result);
};
fileReader.onerror = function(err) {
reject(err);
};
fileReader.readAsArrayBuffer(blob);
});
};
module.exports = exports;