上传文件
index.heml
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
上传图片
<form action="/uploads/" method="post" enctype="multipart/form-data">
<input type="file" name="pic">
<input type="submit" value="上传"></input>
</form>
</body>
</html>
run.py
import os
import time
from flask import Flask,render_template,request
app=Flask(__name__,template_folder='templates')
@app.route('/')
def index():
return render_template('/index.html')
@app.route('/uploads/',methods=['POST'])
def uploads():
file = request.files.get('pic')# 获取文件名称
if not file: # 如果为空还返回之前页面
return render_template('index.html')
file_name = time.strftime('%Y-%m-%d-%H-%M-%S') + file.filename
file_url = f'/static/{file_name}'
file.save(os.path.join(
app.root_path,
app.static_folder,
file_name
))
return file_url
if __name__ == '__main__':
app.run(debug=True)
重新封装run.py文件,增加文件判断
import os
import time
from flask import Flask, render_template, request,send_from_directory
from werkzeug.utils import secure_filename
app = Flask(__name__, template_folder='templates')
# MAX_CONTENT_LENGTH:这个配置设置了请求内容的最大大小(以字节为单位)。
app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024
# 如果请求的大小超过这个限制,Flask 会返回 413 Payload Too Large 错误
# 定义函数用来 判断文件格式
def allowed_format(filename):
format_list = ['png', 'jpg', 'jpeg', 'zip']
format_file = filename.split('.')[-1]
if format_file in format_list:
return True
return False
@app.route('/uploads/', methods=['POST', 'GET'])
def uploads():
file = request.files.get('pic') # 获取文件名称
if not file: # 如果为空还返回之前页面
return render_template('index.html')
if allowed_format(file.filename): # 调用 allowed_format 判断文件格式
file_name = time.strftime('%Y-%m-%d-%H-%M-%S') + file.filename
file_url = f'/static/{file_name}'
file.save( # file.save 保存文件
secure_filename( # secure_filename 去除文件内的空格
os.path.join( # 拼接文件名称
app.root_path, # 获取当前目录
app.static_folder, # 获取静态文件目录名称
file_name # 文件名称
)))
return file_url
return 'error'
# 浏览器访问图片 send_from_directory
@app.route('/uploads/<filename>')
def get_uploads(filename):
# os.getcwd() = 当前目录
path = os.getcwd() + '/static/'
return send_from_directory(path, filename)
if __name__ == '__main__':
app.run(debug=True)
# 获取并限制文件后缀
# 获取后缀:format_file = filename.split('.')[-1]
# 配置上传文件大小:MAX_CONTENT_LENGTH
# app.config['MAX_CONTENT_LENGTH'] = 1024 * 1024
# 保存文件时,去除文件内的空格:secure_filename
# file.save(secure_filename(filename))
# 配置文件可在浏览器访问:send_from_directory
# send_from_directory(path, filename),入参文件路径和文件名称
# 可以参考flask-upload插件

浙公网安备 33010602011771号