我一直在尝试使用JavaScript fetch API将文件上传到Flask API。
我的请求是这样的:
let file = new FormData();
let imageFile = document.getElementById("select-image").files[0];
file.append("file", imageFile);
fetch('http://localhost:5000/image-file',
{
method: 'PUT',
headers: {
'Content-Type': 'multipart/form-data',
'Authorization': token
},
body: file
})
.then(async http => {
let response = http.text();
if (http.ok) {
console.log("created")
postImageData(text);
}
else {
return response.then(response => {throw new Error(response);})
}
})
.catch(error => {
console.log(error);
})
但是当我在flask中执行request.files
时,对象是空的,request.files["file"]
返回错误。
检查请求,有效负载看起来像这样:
------WebKitFormBoundaryG7nrDvgPSk3FSRUs
Content-Disposition: form-data; name="file"; filename="2480_books2.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryG7nrDvgPSk3FSRUs--
我的文件上传元素看起来像这样:
<input id="select-image" name="image" type="file"/><br/>
我可以从请求中访问文件吗?还是请求本身有问题?
2条答案
按热度按时间zfciruhq1#
“请注意,只有当请求方法是POST、PUT或PATCH,并且发送到请求的具有enctype=“multipart/form-data”时,文件才会包含数据。不然就空了。”
可能表单标记中缺少enctype=“multipart/form-data”
xdyibdwo2#
设法解决它-如果其他人遇到这个问题,事实证明解决方案非常简单:只要从fetch请求中删除Content-Type头,因为该类型是自动处理的。