【发布时间】:2018-04-20 05:38:25
【问题描述】:
我是第一次设置文件上传功能。我有一个反应前端和一个将存储文件的快速服务器。我已经设置好了,所以用户可以提交文件,并以我希望它保存在快速服务器上的方式保存它。但是,每当用户提交表单时,他们都会从反应前端(端口 3000)重定向到服务器上的 POST 路由(端口 3050)。我不知道这是发布请求的默认行为,我希望这会使用户留在页面上。
我想避免这种行为,但不确定最好的解决方法。我尝试构建一个充当 AXIOS 请求的操作,但在访问 AXIOS 请求中的表单数据(尤其是文件数据)时遇到问题。我的理解是 AXIOS 中不支持多部分表单数据。
Event.preventdefault 是显而易见的选择,但任何实现都会阻止表单提交获取适当的表单数据并将其发送出去。
表单的代码包含在下面(此版本使用单击事件来阻止默认事件并调度操作 - 操作会触发,但如上所述不会传递任何相关信息):
<div className="modal-wrapper">
<h3 className="title__h3">Upload Data</h3>
<p>Drag and drop anywhere or choose a file to upload.</p>
<p>.csv or .xlsx</p>
<form className="upload-form" ref="uploadForm" id="uploadForm" action="http://localhost:3050/upload" method="POST" enctype="multipart/form-data">
<input name="fileName" placeholder="Name the file you're uploading here"/>
<input type="file" name="upl" id="file" className="inputfile" />
<label htmlFor="file" className="btn btn__white-outline btn__full-width">Select a File</label>
<input onClick={this.submitForm} type="submit" value="submit" />
</form>
</div>;
我的简单 Multer 路线:
app.post('/upload', upload.single('upl'), function(req,res,next) {
return false
})
我的理解是,没有原生支持通过 Axios 发送多部分表单项,我想避免拉入 FormData 模块以使其工作,因为表单(重定向除外)完美无缺.这里是否有一个简单的解决方案可以防止表单在仍然提交表单数据的同时尝试加载服务器端页面?
【问题讨论】:
标签: reactjs express file-upload