from flask import Flask, request, redirect, url_for, render_template_string, flash, send_from_directory
import os
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads/'
app.config['ALLOWED_EXTENSIONS'] = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
app.secret_key = 'supersecretkey' # 用于闪现消息(flash messages)
#确保上传文件夹存在如果没有的话创建文件夹
if not os.path.exists(app.config['UPLOAD_FOLDER']):
os.makedirs(app.config['UPLOAD_FOLDER'])
#检查上传的文件是否符合配置的文件格式
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/')
def upload_form():
return render_template_string('''
<!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>
<ul>
{% for filename in filenames %}
<li><a href="{{ url_for('uploaded_file', filename=filename) }}">{{ filename }}</a></li>
{% endfor %}
</ul>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
''', filenames=os.listdir(app.config['UPLOAD_FOLDER']))
@app.route('/', methods=['POST'])
def upload_file():
# 检查是否有文件部分在请求中
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
print(file)
# 如果用户没有选择文件
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = file.filename
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
flash('File successfully uploaded')
return redirect(url_for('upload_form'))
else:
flash('Allowed file types are txt, pdf, png, jpg, jpeg, gif')
return redirect(request.url)
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
app.run(debug=True)
python的文件上传demo
于 2025-01-07 17:13:11 首次发布