javascript 使用fetch API将文件上传到flask API - request.files为空

xuo3flqw  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(183)

我一直在尝试使用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/>

我可以从请求中访问文件吗?还是请求本身有问题?

zfciruhq

zfciruhq1#

“请注意,只有当请求方法是POST、PUT或PATCH,并且发送到请求的具有enctype=“multipart/form-data”时,文件才会包含数据。不然就空了。”
可能表单标记中缺少enctype=“multipart/form-data”

xdyibdwo

xdyibdwo2#

设法解决它-如果其他人遇到这个问题,事实证明解决方案非常简单:只要从fetch请求中删除Content-Type头,因为该类型是自动处理的。

相关问题