Flask/Werkzeug كيفية إرفاق رأس طول محتوى HTTP لتقديم تنزيل
-
26-09-2019 - |
سؤال
أنا أستخدم Flask (على أساس Werkzeug) الذي يستخدم Python.
يمكن للمستخدم تنزيل ملف ، أنا أستخدم send_from_directory
-وظيفة.
ومع ذلك ، عند تنزيل الملف فعليًا ، رأس HTTP content-length
لم يتم تعيين. لذلك ليس لدى المستخدم أي فكرة عن حجم الملف الذي يتم تنزيله.
استطيع ان استخدم os.path.getsize(FILE_LOCATION)
في Python للحصول على حجم الملف (بالبايت) ، ولكن لا يمكن إيجاد طريقة لتعيين content-length
رأس في قارورة.
أيه أفكار؟
المحلول
أعتقد أنك ستفعل شيئًا كهذا (لم يخبر):
from flask import Response
response = Response()
response.headers.add('content-length', str(os.path.getsize(FILE_LOCATION)))
يرى: كائن رؤوس Werkzug و كائن استجابة Flask.
نصائح أخرى
منذ الإصدار 0.6 الطريقة الكنسية لإضافة رؤوس إلى كائن استجابة هي عبر make_response
الطريقة (انظر مستندات القلاع).
def index():
response = make_response(render_template('index.html', foo=42))
response.headers['X-Parachutes'] = 'parachutes are cool'
return response
كنت بحاجة إلى هذا أيضًا ، ولكن لكل طلبات ، لذلك ما فعلته (بناءً على المستند):
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response
لا تنتمي إلى StackOverflow