我们想发送一个图像文件作为multipart/表单到后端,我们尝试使用html表单来获取文件并发送文件作为formData,下面是代码
export default class Task extends React.Component {
uploadAction() {
var data = new FormData();
var imagedata = document.querySelector('input[type="file"]').files[0];
data.append("data", imagedata);
fetch("http://localhost:8910/taskCreationController/createStoryTask", {
mode: 'no-cors',
method: "POST",
headers: {
"Content-Type": "multipart/form-data"
"Accept": "application/json",
"type": "formData"
},
body: data
}).then(function (res) {
if (res.ok) {
alert("Perfect! ");
} else if (res.status == 401) {
alert("Oops! ");
}
}, function (e) {
alert("Error submitting form!");
});
}
render() {
return (
<form encType="multipart/form-data" action="">
<input type="file" name="fileName" defaultValue="fileName"></input>
<input type="button" value="upload" onClick={this.uploadAction.bind(this)}></input>
</form>
)
}
}
后端错误为 “嵌套异常为org.springframework.web.multipart.MultipartException:无法分析多部分servlet请求;嵌套异常是java.io.IOException:org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为找不到多部分边界”.
阅读了这个之后,我们试着在fetch中给头文件设置边界:
fetch("http://localhost:8910/taskCreationController/createStoryTask", {
mode: 'no-cors',
method: "POST",
headers: {
"Content-Type": "multipart/form-data; boundary=AaB03x" +
"--AaB03x" +
"Content-Disposition: file" +
"Content-Type: png" +
"Content-Transfer-Encoding: binary" +
"...data... " +
"--AaB03x--",
"Accept": "application/json",
"type": "formData"
},
body: data
}).then(function (res) {
if (res.ok) {
alert("Perfect! ");
} else if (res.status == 401) {
alert("Oops! ");
}
}, function (e) {
alert("Error submitting form!");
});
}
这一次,后端的错误是:* 路径为[]的上下文中的servlet [dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.NullPointerException],其根本原因为 *
我们添加多部分边界正确吗?它应该在哪里?也许我们一开始是错的,因为我们没有得到多部分/表单数据。我们如何才能得到正确的呢?
8条答案
按热度按时间tuwxkamq1#
我们只是尝试删除我们的标题和它的工作!
hgb9j2n62#
下面是我通过axios上传预览图像的解决方案。
React组件类:
l7mqbcuq3#
该文件也可在以下事件中使用:
(无需
document.querySelector('input[type="file"]').files[0];
)**注意:**使用
console.log(data.get('inputname'))
进行调试,console.log(data)
不会显示追加的数据。busg9geu4#
https://muffinman.io/uploading-files-using-fetch-multipart-form-data/最适合我,它使用formData。
mpgws1up5#
React文件上载组件
bkhjykvo6#
请求被拒绝,因为找不到多部分边界”。
当你发送
multipart/form-data
时,边界会自动添加到请求头的content-type中。当参数以边界规则结束时,你必须告诉服务器。你必须这样设置Content-type
本文将指导您:https://roytuts.com/boundary-in-multipart-form-data/
包含边界是为了分隔multipart/form-data中的名称/值对。boundary参数的作用类似于multipart/form-data中每对名称和值的标记。boundary参数自动添加到http(超文本传输协议)请求标头的Content-Type中。
f4t66c6m7#
我正在使用云计算,无法推送与上述相同的视频问题,在下面添加了代码以了解详细信息,它对我来说运行良好。files[0]是用于存储文件并将数据作为数组追加的useState
这解决了我的问题,只是添加重定向。希望这可能会有帮助。
wi3ka0sx8#
发送
multipart/formdata
时,您需要避免使用contentType
,因为浏览器会自动分配boundary
和Content-Type
。在您使用
fetch
的情况下,即使您避免使用Content-Type
,它也会设置为默认的text/plain
。因此,尝试使用jQueryajax
。如果我们将其设置为false,它会删除contentType
。这是工作代码