我试图用React上传一个文件并查看它的内容,但它给我的是C:\fakepath\
。我知道为什么它给出fakepath
,但是在react中上传和读取文件内容的正确方法是什么?
<input type="file"
name="myFile"
onChange={this.handleChange} />
handleChange: function(e) {
switch (e.target.name) {
case 'myFile':
const data = new FormData();
data.append('file', e.target.value);
console.log(data);
default:
console.error('Error in handleChange()'); break;
}
},
6条答案
按热度按时间gmxoilav1#
要获取文件信息,您需要使用
event.target.files
,它是选定文件的数组。这些都可以通过FormData
对象轻松上传。请参见下面的代码段:您可能希望查看
FileReader
,如果您希望在客户端处理文件,例如显示图像,它可以提供帮助。https://developer.mozilla.org/en-US/docs/Web/API/FileReader
q7solyqu2#
您可以使用React Dropzone Uploader,它可以为您提供开箱即用的文件预览(包括图像缩略图),还可以为您处理上传。
在
onChangeStatus
prop中,您可以对文件的meta
数据和file
本身做出React,这意味着您可以在上传文件之前或之后进行任何类型的客户端处理。上传有进度指示器,可以取消或重新启动。用户界面是完全可定制的。
全面披露:我写了这个图书馆。
qf9go6mv3#
尝试在后端使用Multer和gridfs-storage,并将fileID与mongoose模式沿着存储。
然后在前端正常处理它(使用Axios)并上传整个文件,并以正常的React方式抓住所有信息:
aor9mmx14#
你用过dropzone吗?看到这个react-dropzone
容易实现,上传和返回URL,如果这很重要。
kxkpmulp5#
您可以使用FileReader onload方法读取文件数据,然后将其发送到服务器。
你可以发现这对使用React ReactJS File Reader中的File Reader处理文件很有用
jvidinwx6#
为了补充这里的其他答案,特别是对于React的新手来说,理解react句柄的形式与人们习惯的形式略有不同是很有用的。
在高级别上,react建议使用“受控组件”:
在大多数情况下,我们建议使用受控组件来实现窗体。在受控组件中,表单数据由React组件处理。另一种方法是不受控制的组件,其中表单数据由DOM本身处理。
这实质上意味着用户输入,例如,文本字段也是组件的状态,并且当用户更新它时,状态被更新,并且状态的值被显示在表单中。这意味着状态和表单数据总是同步的。
对于输入类型的文件,这将不起作用,因为文件输入值是只读的。因此,不能使用受控部件,而是使用“不受控部件”。
在React中,an始终是一个不受控制的组件,因为它的值只能由用户设置,而不能通过编程方式设置。
推荐的输入文件类型的方法(在撰写本文时)如下,来自react文档www.example.comhttps://reactjs.org/docs/uncontrolled-components.html#the-file-input-tag:
该文档包括一个codepen示例,可以在其上构建。