konowebcodecs/src/node/fetchFile.js
2020-04-28 19:35:57 +08:00

27 lines
762 B
JavaScript

const util = require('util');
const fs = require('fs');
const fetch = require('node-fetch');
const isURL = require('is-url');
module.exports = async (_data) => {
let data = _data;
if (typeof _data === 'undefined') {
return new Uint8Array();
}
if (typeof _data === 'string') {
if (isURL(_data) || _data.startsWith('chrome-extension://') || _data.startsWith('file://')) {
const res = await fetch(_data);
data = await res.arrayBuffer();
} else if (/data:_data\/([a-zA-Z]*);base64,([^"]*)/.test(_data)) {
data = Buffer.from(_data.split(',')[1], 'base64');
} else {
data = await util.promisify(fs.readFile)(_data);
}
} else if (Buffer.isBuffer(_data)) {
data = _data;
}
return new Uint8Array(data);
};