redux 如何将JS文件示例转换为普通对象?

6qftjkof  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一个文件输入和一个处理函数,我需要将每个文件转换成一个普通对象,并使用URL.createObjectURL给予它一个URL,然后存储它们。

const files = [];
const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {
  for (const file of Array.from(e.target.files)) {
    const plain = {...file, url: URL.createObjectURL(file)};
    files.push(plain);
  }
}

然而,这是行不通的。plain原来只有url属性(例如{url: 'blob:http://localhost:8080/5a574d7f-178d-44f4-accf-4be313ac098a'}
我也试过:
第一次
我希望有一个files数组,它由具有url属性和File属性的普通对象组成。我该怎么做呢?
先谢谢你。

Edit:好吧,最初我想把文件存储在Redux存储中,但是它抱怨不可序列化的值。现在我意识到这根本不是一个好主意。

我需要URL来显示上传图像的预览。结果我需要Files本身来稍后将它们作为formdata发送。
有没有更好的方法来存储和操作上传的图像,同时方便地在多个组件之间共享它们?使用简单的useState并将状态作为道具传递给子组件是一个好的选择吗?

k5ifujac

k5ifujac1#

File对象不是一个典型的JS对象类型,它是一个Blob,我认为它没有任何属性,您可以通过它访问的唯一方法和属性由它的Prototype(而不是File本身)拥有,在这种情况下,您不能“复制”对象的方法或属性。
为什么不直接将其存储在数组中,方法如下:

const files = [];
const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => {
  for (const file of Array.from(e.target.files)) {
    const plain = {file: file, url: URL.createObjectURL(file)};
    files.push(plain);
  }
}

相关问题