0

我能够使用以下代码将大文件上传到服务器 -

@app.route("/upload", methods=["POST"])
def upload():
    with open("/tmp/output_file", "bw") as f:
        chunk_size = 4096
        while True:
            chunk = request.stream.read(chunk_size)
            if len(chunk) == 0:
                return
            f.write(chunk)

但是,如果我使用 request.form['userId'] 或在上述代码中作为表单数据发送的任何参数,它将失败。

根据其中一篇博客文章,Flask 的请求有一个流,它将包含您正在上传的文件数据。您可以从中读取,将其视为类似文件的对象。诀窍似乎是您不应该使用其他请求属性,例如 request.form 或 request.file 因为这会将流具体化为内存/文件。如果文件超过 500Kb,Flask 默认会将文件保存到磁盘,所以不要触摸文件。

有没有一种方法可以让我们发送额外的参数,比如 userId 以及上传到烧瓶中的文件?

4

1 回答 1

0

在请求中使用标头。

如果您想发送用户名和数据

headers['username'] = 'name of the user'
r = requests.post(url, data=chunk, headers=headers)
于 2020-06-30T16:28:58.383 回答