클라이언트 (Python request.post 사용)에서 대용량 파일 (~ 1GB)을 플라스크 서버에 업로드하려고합니다.Python Flask 청크 데이터 업로드가 작동하지 않습니다.
클라이언트가 서버에 요청을 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
아마도 모든 데이터가 처리 될 때 '없음'을 반환하기 때문에? while 루프에서'return' 대신에'break'하면 어떨까요? – dimmg
stamaimer : 아니요, 직접적인 요청 및 응답 코드입니다. 청크로 데이터를 받아들이는 방법을 알고 싶을뿐입니다. dimmg : None을 제거하려고했으나 각 요청은 계속 청크 버퍼를 유지하는 대신 1KB로만 간주됩니다. –