Flask 之 secure_filename


from flask import Flask, redirect, request, render_template, url_for, send_from_directory
from werkzeug.utils import secure_filename
import os


app = Flask(__name__)


'''配置文件路徑, 防止惡意讀取你文件的'''
app.config['UPLOAD_FOLDER'] = 'C:/Users/Administrator/Desktop/flask/uploads/'

'''
設置上傳文件大小

'''
app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024

'''
文件上傳
三要素
    - 表單提交是POST 的請求
    - 表單 寫入參數 enctype='multipart/form-data' 當上傳內容非文本(MP3。MP4。。。)時候,如圖片。需要將表單的設置成enctype編碼格式
    - 使用上傳屬性 file 

'''


'''
filename 獲得上傳文件名,secure_filename函數獲得安全文件名,防止客戶端偽造文件

'''


@app.route('/upload_file')
def index():
    return render_template('upload_file.html')


''' 普通文件上傳 '''
# @app.route('/upload_file', methods=['GET', 'POST'])
# def upload_file():
#     if request.method == 'POST':
#         f = request.files.get('myfile')
#
#         f.save(secure_filename(f.filename))
#
#     return Response('文件上傳成功')


''' 存儲安全路徑上傳 '''
# @app.route('/upload_file', methods=['GET', 'POST'])
# def upload_file():
#     if request.method == 'POST':
#         f = request.files.get('myfile')
#
#         '''這個是文件名稱'''
#         filename = secure_filename(f.filename)
#
#         '''將文件夾和文件名連接在一起'''
#         f.save(os.path.join(app.config['UPLOAD_FOLDER'] + filename))
#
#
#     return Response('文件上傳成功')


''' 展示你上傳的圖片。。 '''
@app.route('/upload_file', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files.get('myfile')

        '''這個是文件名稱'''
        filename = secure_filename(f.filename)

        '''將文件夾和文件名連接在一起'''
        f.save(os.path.join(app.config['UPLOAD_FOLDER'] + filename))

        return redirect(url_for('show_image', filename=filename))



@app.route('/show_image/<filename>')
def show_image(filename):
    '''send_from_directory 這是 接口返回真實的文件,就是幫你找到你的所需要的文件'''
    return send_from_directory(app.config['UPLOAD_FOLDER'],filename)



if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>UPLOAD FILE</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="myfile">
    <button type="submit">上傳</button>
</form>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM