最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用python的Flask框架進行上傳和下載文件詳解

 更新時間:2023年07月25日 09:36:57   作者:IT之一小佬  
這篇文章主要介紹了使用python的Flask框架進行上傳和下載文件詳解,Flask是一個使用Pyhton編寫的輕量級Web應用框架,工具包采用Werkzeug,模板引擎則使用Jinja2,是目前十分流行的web框架,需要的朋友可以參考下

send_file()函數:

def send_file(
    path_or_file: t.Union[os.PathLike, str, t.BinaryIO],
    mimetype: t.Optional[str] = None,
    as_attachment: bool = False,
    download_name: t.Optional[str] = None,
    attachment_filename: t.Optional[str] = None,
    conditional: bool = True,
    etag: t.Union[bool, str] = True,
    add_etags: t.Optional[bool] = None,
    last_modified: t.Optional[t.Union[datetime, int, float]] = None,
    max_age: t.Optional[
        t.Union[int, t.Callable[[t.Optional[str]], t.Optional[int]]]
    ] = None,
    cache_timeout: t.Optional[int] = None,
):

參數解析:

  • path_or_file:要發(fā)送的文件的路徑,如果給出了相對路徑,則相對于當前工作目錄。或者,以二進制模式打開的類文件對象。確保將文件指針查找到數據的開頭。
  • mimetype:為文件發(fā)送的MIME類型。如果沒有提供,它將嘗試從文件名檢測它。
  • as_attachment:指示瀏覽器應該提供給保存文件而不是顯示它。
  • download_name:瀏覽器保存文件時使用的默認名稱。默認為傳遞的文件名。
  • conditional:基于請求頭啟用條件響應和范圍響應。需要傳遞一個文件路徑和``environ``。
  • etag:計算文件的etag,這需要傳遞一個文件路徑。也可以是字符串來代替。
  • last_modified:發(fā)送文件的最后修改時間,單位為秒。如果沒有提供,它將嘗試從文件路徑檢測它。
  • max_age:客戶端應該緩存文件多長時間,以秒為單位。如果設置,' ' Cache-Control ' '將為' ' public ' ',否則將為' ' no-cache ' '以選擇條件緩存。

注意:

示例代碼:

import os
from flask import Flask, send_file, request, render_template, redirect
from werkzeug.utils import secure_filename
app = Flask(__name__)
UPLOAD_FOLDER = 'media'  # 注意:要提前在根目錄下新建media文件,否則會報錯
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# 判斷上傳的文件是否是允許的后綴
def allowed_file(filename):
    return "." in filename and filename.rsplit('.', 1)[1].lower() in set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
@app.route('/')
def index():
    return "hello world!"
@app.route('/generate_file')
def generate_file():
    with open('./new_file.txt', 'w', encoding='utf-8') as f:
        f.write('我是new_file.txt文件!')
    return "<./new_file.txt>文件已經生成!"
@app.route('/download')
def download():
    return send_file('./new_file.txt', as_attachment=True)
@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'GET':
        return render_template('upload.html')
    else:
        if "file" not in request.files:
            return redirect(request.url)
        file = request.files.get('file')  # 獲取文件
        # 上傳空文件(無文件)
        if file.filename == '':
            return redirect(request.url)
        if file and allowed_file(file.filename):
            if not os.path.exists(f'./templates/{UPLOAD_FOLDER}'):
                os.mkdir(f'./templates/{UPLOAD_FOLDER}')
            filename = secure_filename(file.filename)  # 用這個函數確定文件名稱是否是安全 (注意:中文不能識別)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))  # 保存文件
            return "上傳文件成功!"
if __name__ == '__main__':
    app.run()

下載和上傳路徑中可以添加用戶身份驗證:

import os
from flask import Flask, send_file, request, render_template, redirect
from werkzeug.utils import secure_filename
app = Flask(__name__)
UPLOAD_FOLDER = 'media'  # 注意:要提前在根目錄下新建media文件,否則會報錯
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
allow_users = ['dgw', 'super_user']
# 判斷上傳的文件是否是允許的后綴
def allowed_file(filename):
    return "." in filename and filename.rsplit('.', 1)[1].lower() in set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
@app.route('/')
def index():
    return "hello world!"
@app.route('/generate_file')
def generate_file():
    with open('./new_file.txt', 'w', encoding='utf-8') as f:
        f.write('我是new_file.txt文件!')
    return "<./new_file.txt>文件已經生成!"
@app.route('/download')
def download():
    user_name = request.args.get('user_name')
    if not user_name:
        return "你沒有權限下載文件!"
    if user_name and user_name not in allow_users:
        return "你沒有權限下載文件!"
    return send_file('./new_file.txt', as_attachment=True)
@app.route('/upload/<string:user_name>', methods=['GET', 'POST'])
def upload(user_name):
    if request.method == 'GET':
        if user_name not in allow_users:
            return "您沒有權限訪問此頁面!"
        return render_template('upload.html')
    else:
        if user_name not in allow_users:
            return "您沒有權限訪問此頁面!"
        if "file" not in request.files:
            return redirect(request.url)
        file = request.files.get('file')  # 獲取文件
        # 上傳空文件(無文件)
        if file.filename == '':
            return redirect(request.url)
        if file and allowed_file(file.filename):
            if not os.path.exists(f'./templates/{UPLOAD_FOLDER}'):
                os.mkdir(f'./templates/{UPLOAD_FOLDER}')
            filename = secure_filename(file.filename)  # 用這個函數確定文件名稱是否是安全 (注意:中文不能識別)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))  # 保存文件
            return "上傳文件成功!"
if __name__ == '__main__':
    app.run()

附錄:

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上傳">
</form>
</body>
</html>

到此這篇關于使用python的Flask框架進行上傳和下載文件詳解的文章就介紹到這了,更多相關python的Flask框架上傳下載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 用Python實現(xiàn)飛機大戰(zhàn)小游戲的完整代碼

    用Python實現(xiàn)飛機大戰(zhàn)小游戲的完整代碼

    不知道大家是否曾體驗過打飛機的樂趣,或者是否曾與朋友們一起較量過這款游,這篇文章主要介紹了用Python實現(xiàn)飛機大戰(zhàn)小游戲的完整代碼,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • python實用代碼片段收集貼

    python實用代碼片段收集貼

    這篇文章主要介紹了python實用代碼片段收集貼,本文收集了如獲取一個類的所有子類、計算運行時間、SQLAlchemy簡單使用、實現(xiàn)類似Java或C中的枚舉等實用功能代碼,需要的朋友可以參考下
    2015-06-06
  • Python無法安裝包的一種解決(Requirement already satisfied問題)

    Python無法安裝包的一種解決(Requirement already satisfied問題)

    這篇文章主要介紹了Python無法安裝包的一種解決(Requirement already satisfied問題),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 這十大Python庫你真應該知道

    這十大Python庫你真應該知道

    這篇文章主要為大家詳細介紹了十大Python庫,學習數據分析應該弄清楚該學習什么技能,該使用哪種工具,本文具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Pyqt5中5種布局的實現(xiàn)示例

    Pyqt5中5種布局的實現(xiàn)示例

    本文介紹PyQt5中五種核心布局管理器的使用方法,包括水平布局、垂直布局、網格布局、表單布局及堆疊布局,下面就一起來了解一下,感興趣的可以了解一下
    2025-09-09
  • python格式化字符串實例總結

    python格式化字符串實例總結

    這篇文章主要介紹了python格式化字符串的方法,實例展示了常見的幾類Python針對字符串的格式方法,非常實用,需要的朋友可以參考下
    2014-09-09
  • Python數據分析基礎之異常值檢測和處理方式

    Python數據分析基礎之異常值檢測和處理方式

    這篇文章主要介紹了Python數據分析基礎之異常值檢測和處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • TensorFlow實現(xiàn)簡單的CNN的方法

    TensorFlow實現(xiàn)簡單的CNN的方法

    這篇文章主要介紹了TensorFlow實現(xiàn)簡單的CNN的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python?matplotlib?seaborn繪圖教程詳解

    Python?matplotlib?seaborn繪圖教程詳解

    Seaborn是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,在大多數情況下使用seaborn就能做出很具有吸引力的圖。本文將詳細講解如何利用Seaborn繪制圖表,需要的可以參考一下
    2022-03-03
  • Python腳本如何在bilibili中查找彈幕發(fā)送者

    Python腳本如何在bilibili中查找彈幕發(fā)送者

    這篇文章主要介紹了如何在bilibili中查找彈幕發(fā)送者,本文給大家分享小編寫的一個python腳本來實現(xiàn)bilibili彈幕發(fā)送者,需要的朋友可以參考下
    2020-06-06

最新評論

永修县| 静安区| 页游| 潜山县| 文山县| 奉贤区| 石泉县| 克东县| 东阿县| 仲巴县| 黑山县| 贺州市| 大足县| 图木舒克市| 商都县| 晋宁县| 班玛县| 浪卡子县| 浮山县| 楚雄市| 锦屏县| 花莲市| 米泉市| 东阿县| 中卫市| 宝鸡市| 阳新县| 克东县| 名山县| 淮北市| 永清县| 石首市| 甘泉县| 福安市| 孟村| 肥东县| 武乡县| 化州市| 海林市| 循化| 搜索|