当前位置: 首页 > 工具软件 > flask-ask > 使用案例 >

2021-09-22 flask文件的上传和下载以及路径拼接和不支持中文的安全文件名记录

阮飞翔
2023-12-01

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 '上传成功'
扩展:
  1. 关于安全的文件名
    name = secure_filename(文件名),这个是文件名安全过滤器,它返回ASK码但是它不支持中文。遇到中文会不显示。
  2. 关于路径的拼接
#项目路径:
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)

》》》如果需要选择文件下载也和上面一样做俩路由一个是文件列表,后一个就这个下载动作路由。就这样吧 ,太啰嗦了。

 类似资料: