伸缩自如的Flask [day13] 档案上传

首先是上传档案,
可以先看一下Flask官网的範例:

import osfrom flask import Flask, flash, request, redirect, url_forfrom werkzeug.utils import secure_filenameUPLOAD_FOLDER = '/path/to/the/uploads'ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}app = Flask(__name__)app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDERdef allowed_file(filename):    return '.' in filename and \           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

确认只有那些附档名可以上传

@app.route('/', methods=['GET', 'POST'])def upload_file():    if request.method == 'POST':        # check if the post request has the file part        if 'file' not in request.files:            flash('No file part')            return redirect(request.url)        file = request.files['file']        # if user does not select file, browser also        # submit an empty part without filename        if file.filename == '':            flash('No selected file')            return redirect(request.url)        if file and allowed_file(file.filename):            filename = secure_filename(file.filename)            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))            return redirect(url_for('uploaded_file',                                    filename=filename))    return '''    <!doctype html>    <title>Upload new File</title>    <h1>Upload new File</h1>    <form method=post enctype=multipart/form-data>      <input type=file name=file>      <input type=submit value=Upload>    </form>

确认有档案上传,并且from werkzeug.utils import secure_filename中的secure_filename可以检查档名及MIME Type,但是如果有中文字,有可能档案名称就会被吃掉不回传了。

再来介绍python-magic这个套件,它可以帮助我们检查还是stream状态的档案MIME Type。
安装方式:
linux

pip install python-magic

windows

pip install python-magic-bin==0.4.14

再来是使用方法:

import magicaudio_File= request.files.get('audio_File')    mime_type = magic.from_buffer(audio_File.stream.read(), mime=True)print(mime_type)

所以,要是上传的档案不是我们想要的mime_type时,我们可以拒绝进行存储的动作。

[day 1] 开场白[day 2] blue_print[day 3] Factory mode[day 4] JWT token[day 5] session[day 6] Jinja[day 7] Post data with Form tag[day 8] ajax with jquery[day 9] request[day 10] 将资料写进DB(pymongo)[day 11] log with mongoDB[day 12] Sql Database[day 13] 档案上传[day 14] 档案下载 及 其他传值方法[day 15] boostrap 4.6[day 16] API[day 17] Docker image化--安装篇[day 18] Docker image化--运行篇[day 19] Nginx[day 20] Docker compose[day 21] Nginx with https[day 22] pythonanywhere 部署[day 23] GCP app engine (介绍)[day 24] GCP app engine (deploy)[day 25] Flask with web cam[day 26] Flask with ML[day 27] Supervisor[day 28] Flask-Mail[day 29] Line Messaging API[day 30] 结语

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章