我能够使用以下代码将大文件上传到服务器 -
@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 以及上传到烧瓶中的文件?