flask 内核精简非常适合一些简单服务器架设,今天突然想起整理下上传下载方法做个笔记 ,原则就俩字简单能用即可,其他一概不考虑。
1、上传:
采用两个路由和一个提交页面配合
upload.html 文件
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form action="/uploader" method="POST" enctype="multipart/form-data">
<input type="file" name="file" accept=".jpg,.png,.xls,.doc,.xlsx" />
<input type="submit" />
</form>
</body>
</html>
》》》这个页面注意下 POST方法去呼叫action属性所指定的路由,下面 input 内容是告诉浏览器这是个文件不是别的啥玩意 ,enctype这个属性在上传文件这里必须是这么写的表示编码的一些含义。反正不明白就是整个照抄也没事,上传这玩意也就是个固定套路,指定好路由地址和input的NAME其他都一样。
》然后设置 setting.py 配置文件
UPLOAD_FOLDER ='upload/'
import setting
app = Flask(__name__)
app.config.from_object(setting)#配置进来
》起始上传路由,展示文件选择页面
@app.route('/upload')
def upload_file():
return render_template('upload.html')
》上传动作路由,这次记录的POST上传,request里边就有.files[ ]方法
@app.route('/uploader', methods = ['GET', 'POST'])
def uploader():
if request.method == 'POST':
f = request.files['file'] #调用方法形成对象 ,f对象可以.filename获取文件名也可以f.save*(保存路径) 执行保存动作
f.save(r'./upload/%s'%f.filename) #保存路径格式化进去文件名,保存。
return '上传成功'
扩展:
- 关于安全的文件名
name = secure_filename(文件名)
,这个是文件名安全过滤器,它返回ASK码但是它不支持中文。遇到中文会不显示。 - 关于路径的拼接
#项目路径:
mainDir=os.path.dirname(os.path.abspath(__file__))#括号里边获得当前运行文件,到括号外边则是获取文件夹而已。
#静态文件路径,这个JOIN可以拼接路径,配合上面的获取项目路径,可以完整的获得相对路径。
st_Dir=os.path.join(mainDir,'upload')
2、下载方法更简单,主要就一句话,文件名传进来前边是下载地址,后面是固定参数。
from flask import send_file
@app.route('/down/<name>')
def down(name):
return send_file(r'./upload/%s'%name,as_attachment=True)