使用Quart / Flask上载多个文件会添加文件对象以字节形式形成,而文件没有内容

时间:2019-02-02 03:00:37

标签: python flask quart

我有一个网页(web-app),允许用户将文件上传到服务器。服务器端是Python Quart(异步Flask),在Nginx之后是hypercorn服务器。

问题,我无法上传多个文件。单个文件上传没有任何问题,一切正常。

我阅读了与此相关的所有堆栈溢出帖子,并且尝试了无数建议的解决方案。这种情况有所不同,当使用单个文件提交表单时,文件对象包含在请求的“文件”部分中,但是当提交多个文件时,请求的“文件”部分为空,并且文件-对象包括在“形式”使用正确的密钥,并且它的值是一个“字节”的对象。

在HTML表格是:

body {
  height: 100vh;
  max-height: 100vh;
}
textarea { 
  width: 100%; 
  height: auto;
}

使用JS将表单添加到客户端页面,并使用Fetch请求异步提交表单。 请求标头是:

<textarea></textarea>
<textarea></textarea>
<button>POST</button>

该请求有效载荷是:

<form method="POST" 
      action="/upload"
      enctype="multipart/form-data">
  <div>
    <input value="xyz" name="number" type="hidden">
    <textarea name="message" placeholder="write message"></textarea>
  </div>
  <div>
    <input name="attach" multiple="" type="file">
    <input value="send" type="submit">
  </div>
</form>

在服务器上:

Accept:           */*
Accept-Encoding:  gzip, deflate, br
Accept-Language:  en-US;q=0.7,en;q=0.3
Connection:       keep-alive
Content-Length:   14563
Content-type:     multipart/form-data; boundary=…-5168
Cookie:           
DNT:              1
Host:             www.example.com
origin:           https://www.example.com
Referer:          https://www.example.com/mypage.html
User-Agent:       Mozilla/5.0 (X11; Ubuntu; Linu…) Gecko/20100101 Firefox/62.0

提交单个文件时,在上载中找到“附加”键,“打印”显示正确的multidict对象。 “ attach”键不在form_data中。提交两个或更多文件时,上传的文件长度为0,然后在form_data中找到“ attach”键,并以bytes对象作为值。

我确定问题是由“ await request.files”引起的,但我不知道为什么或如何解决问题。

0 个答案:

没有答案