【发布时间】:2017-04-13 04:58:18
【问题描述】:
我正在尝试从客户端(使用 Python request.post)上传一个大文件(比如 ~1GB)到烧瓶服务器。
当客户端以 1024 的块向服务器发送请求时,服务器不会读取整个文件并保存到服务器 0kb。
你能帮我调试一下我在这里到底犯了什么错误吗?
服务器 - 烧瓶代码:
from flask import Flask, request, jsonify
from werkzeug.utils import secure_filename
import os
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'
@app.route("/upload/<filename>", methods=["POST", "PUT"])
def upload_process(filename):
filename = secure_filename(filename)
fileFullPath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
with open(fileFullPath, "wb") as f:
chunk_size = 1024
chunk = request.stream.read(chunk_size)
f.write(chunk)
return jsonify({'filename': filename})
if __name__ == '__main__':
app.run(host="0.0.0.0", port=int("8080"),debug=True)
客户端 - 请求代码
import os
import requests
def read_in_chunks(file_object, chunk_size=1024):
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
def main(fname, url):
content_path = os.path.abspath(fname)
with open(content_path, 'r') as f:
try:
r = requests.post(url, data=read_in_chunks(f))
print "r: {0}".format(r)
except Exception, e:
print e
if __name__ == '__main__':
filename = 'bigfile.zip' # ~1GB
url = 'http://localhost:8080/upload/{0}'.format(filename)
main(filename, url)
【问题讨论】:
-
在烧瓶服务器之前使用正向代理服务器吗?
-
可能是因为您在处理完所有数据后返回
None?如果你在 while 循环中break而不是return怎么办? -
stamaimer:不,这是直接请求和响应代码。只想知道如何分块接受数据。 dimmg:我尝试删除 None,但仍然认为每个请求只有 1KB,而不是继续块缓冲区。
-
有什么更新吗?
-
你有任何更新吗?
标签: python flask request chunks