2010-09-28 35 views
16

Tôi đang sử dụng Flask (dựa trên Werkzeug) sử dụng Python.Flask/Werkzeug cách đính kèm tiêu đề có độ dài nội dung HTTP để tải xuống tệp

Người dùng có thể tải xuống tệp, tôi đang sử dụng send_from_directory-function.

Tuy nhiên khi thực sự tải xuống tệp, tiêu đề HTTP content-length không được đặt. Vì vậy, người dùng không có ý tưởng lớn như thế nào tập tin được tải xuống.

Tôi có thể sử dụng os.path.getsize(FILE_LOCATION) bằng Python để lấy kích thước tệp (tính bằng byte), nhưng không thể tìm cách đặt tiêu đề content-length trong Flask.

Bất kỳ ý tưởng nào?

Trả lời

10

Tôi tin rằng bạn muốn làm một cái gì đó như thế này (chưa được kiểm tra):

from flask import Response 
response = Response() 
response.headers.add('content-length', str(os.path.getsize(FILE_LOCATION))) 

Xem: Werkzug's Headers objectFlask's Response object.

36

Kể từ phiên bản 0.6, cách kinh điển để thêm tiêu đề vào đối tượng phản hồi là thông qua phương thức make_response (xem Flask docs).

def index(): 
    response = make_response(render_template('index.html', foo=42)) 
    response.headers['X-Parachutes'] = 'parachutes are cool' 
    return response 
38

tôi cần này cũng có, nhưng đối với tất cả các yêu cầu, vì vậy đây là những gì tôi đã làm (dựa trên doc):

@app.after_request 
def after_request(response): 
    response.headers.add('Access-Control-Allow-Origin', '*') 
    return response 
Các vấn đề liên quan