我試圖從上傳客戶端一個大文件(比如說〜1GB)(使用Python request.post),歷時服務器。的Python瓶塊數據上傳不工作
當客戶發送的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)
您是否在燒瓶服務器之前使用了轉發代理服務器? – stamaimer
也許是因爲您在處理所有數據時返回'None'?如果你在while循環中'break',而不是'return'會怎麼樣? – dimmg
stamaimer:不,這是一個直接的請求和響應代碼。只是想知道如何接收大塊數據。昏暗:我試圖刪除無,但仍然認爲每個請求只有1KB而不是繼續chunks緩衝區。 –