首頁 > 軟體

Flask框架編寫檔案下載介面過程講解

2023-11-04 06:01:06

方式一

@app.route("/download1")
def download():
    # return send_file('test.exe', as_attachment=True)
    return send_file('2.jpg')
    # return send_file('1.mp3')

如果不加as_attachment引數,則會向瀏覽器傳送檔案,比如傳送一張圖片:

傳送mp3

加上as_attachment引數,則會下載檔案。

方式二

通過Response來實現

部分程式碼如下:

@app.route("/download2")
def download2():
    file_name = "1.jpg"
    #https://www.runoob.com/http/http-content-type.html
    response = Response(file_send(file_name), content_type='image/jpeg')
    response.headers["Content-disposition"] = f'attachment; filename={file_name}'
    return response

其中content-type要根據檔案的具體型別來設定,具體參考如下常見的:

content-type(內容型別),一般是指網頁中存在的 content-type,用於定義網路檔案的型別和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個檔案,content-type 檔頭告訴使用者端實際返回的內容的內容型別。

常見的媒體格式型別如下:

  • text/html : HTML格式
  • text/plain :純文字格式
  • text/xml : XML格式
  • image/gif :gif圖片格式
  • image/jpeg :jpg圖片格式
  • image/png:png圖片格式
  • application/xhtml+xml :XHTML格式
  • application/xml: XML資料格式
  • application/atom+xml :Atom XML聚合格式
  • application/json: JSON資料格式
  • application/pdf:pdf格式
  • application/msword : Word檔案格式
  • application/octet-stream : 二進位制流資料(如常見的檔案下載)
  • application/x-www-form-urlencoded : 中預設的encType,form表單資料被編碼為key/value格式傳送到伺服器(表單預設的提交資料的格式)

完整程式碼

app.py

from flask import Flask,send_file,Response
from flask_cors import CORS
app = Flask(__name__)
CORS(app,resources={r"/*": {"origins": "*"}},supports_credentials=True)
@app.route("/download1")
def download():
    # return send_file('test.exe', as_attachment=True)
    # return send_file('2.jpg')
    return send_file('1.mp3')
    # filefold file
    # return send_from_directory('./', 'test.exe', as_attachment=True)
# send big file
def file_send(file_path): 
    with open(file_path, 'rb') as f:
        while 1:
            data = f.read(20 * 1024 * 1024)  # per 20M
            if not data:
                break
            yield data
@app.route("/download2")
def download2():
    file_name = "1.jpg"
    response = Response(file_send(file_name), content_type='image/jpeg')
    response.headers["Content-disposition"] = f'attachment; filename={file_name}'
    return response
if __name__ == '__main__':
    app.config['JSON_AS_ASCII'] = False
    app.run(debug=True)

到此這篇關於Flask框架編寫檔案下載介面過程講解的文章就介紹到這了,更多相關Flask檔案下載內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com