首先是上传档案,
可以先看一下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] 结语