【发布时间】:2019-05-28 08:38:24
【问题描述】:
如何将文件转换为字节数组。
下面的另一种方式
let file = new File([myBlob], "name");
文件需要转换成字节流
【问题讨论】:
-
您是否使用图像?请提供您已经尝试过的代码
-
试试这个 let byteArray = new Uint8Array(file)
标签: javascript
如何将文件转换为字节数组。
下面的另一种方式
let file = new File([myBlob], "name");
文件需要转换成字节流
【问题讨论】:
标签: javascript
您或许可以尝试使用浏览器中提供的 FileReader API。
let file = new File(...) // this could be from file input or other source
let fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
fileReader.onload = function(ev) {
const result = ev.target.result;
console.log(result); // here it is
}
根据this answer,如果readAsArrayBuffer 的结果对您不起作用,您可能需要使用new Uint8Array 将其转换为真正的byte[]。这是上述代码的扩展版本:
let file = new File(...) // this could be from file input or other source
let fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
fileReader.onload = function(ev) {
const array = new Uint8Array(ev.target.result);
const fileByteArray = [];
for (let i = 0; i < array.length; i++) {
fileByteArray.push(array[i]);
}
console.log(array); // here it is
}
这里是用 promise 包裹起来的实现:
function getByteArray(file) {
return new Promise(function(resolve, reject) {
fileReader.readAsArrayBuffer(file);
fileReader.onload = function(ev) {
const array = new Uint8Array(ev.target.result);
const fileByteArray = [];
for (let i = 0; i < array.length; i++) {
fileByteArray.push(array[i]);
}
resolve(array); // successful
}
fileReader.onerror = reject; // call reject if error
})
}
//usage
let file = new File(...)
getByteArray(file).then((byteArray) => {
// do whatever you need
console.log(byteArray);
})
附:
如果由于某种原因不能引用ev.target,请尝试使用fileReader.result。
【讨论】:
fileReader.result 是否解决了问题?附言如果此答案解决了您的任务,请将其标记为已接受。谢谢。