返回
如何将数组转换为文件列表,同时保留文件大小?
javascript
2024-03-03 02:36:26
从数组到文件列表:保留文件大小的正确方法
在数据处理中,将数组转换为文件列表是一个常见任务。然而,直接转换会导致文件大小丢失。本文将探讨如何 将数组转换为文件列表,同时保留 文件大小。
方法
1. FileReader 对象
使用 FileReader 对象,我们可以逐个读取数组中的文件,并创建包含文件内容的新 File 对象。
const fileList = [];
files.forEach(file => {
const reader = new FileReader();
reader.onload = () => {
const fileObject = new File([reader.result], file.split('/').pop());
fileList.push(fileObject);
};
reader.readAsArrayBuffer(file);
});
2. XMLHttpRequest 对象
XMLHttpRequest 对象也可以用于此目的。它执行异步请求,并从服务器获取文件内容。
const fileList = [];
files.forEach(file => {
const xhr = new XMLHttpRequest();
xhr.open('GET', file);
xhr.responseType = 'arraybuffer';
xhr.onload = () => {
const fileObject = new File([xhr.response], file.split('/').pop());
fileList.push(fileObject);
};
xhr.send();
});
优点
- 保留文件大小
- 使用标准 API,兼容性强
代码示例
const files = ['state/file1.xlsx', 'state/file2.xlsx'];
const fileList = createFileListWithFileReader(files);
console.log(fileList);
常见问题解答
Q1. 这些方法会修改原始文件吗?
A: 不,它们不会修改原始文件。它们创建新的 File 对象,其中包含从原始文件中提取的内容。
Q2. 是否有其他方法可以转换?
A: 是的,可以使用第三方库(如 read-chunk),但 FileReader 和 XMLHttpRequest 方法是本机方法,兼容性更好。
Q3. 如何处理大型文件?
A: 这些方法适用于任何大小的文件,但对于大文件,可以使用分块读取技术来提高性能。
Q4. 可以将文件列表转换为数组吗?
A: 是的,可以使用 Array.from()
方法将 FileList 对象转换为数组。
Q5. 有什么替代方法可以保留文件大小?
A: 使用 JSON.stringify() 序列化数组,其中包含文件大小和其他属性。然而,这需要在服务器端解析和反序列化。