返回

如何将数组转换为文件列表,同时保留文件大小?

javascript

从数组到文件列表:保留文件大小的正确方法

在数据处理中,将数组转换为文件列表是一个常见任务。然而,直接转换会导致文件大小丢失。本文将探讨如何 将数组转换为文件列表,同时保留 文件大小。

方法

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() 序列化数组,其中包含文件大小和其他属性。然而,这需要在服务器端解析和反序列化。