文件上传与下载在平时开发中很常见,所以也是很重要的一部分。下面来一起看看flask中的文件上传与下载。

相关配置

# 设置文件上传保存路径
app.config['UPLOAD_FOLDER'] = 'static/upload/'
# MAX_CONTENT_LENGTH设置上传文件的大小,单位字节
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024

上传文件

定义一个视图函数,用于返回上传页面和保存上传文件。

@app.route('/upload', methods=['GET', 'POST'])
def upload():if(request.method == 'GET'):return render_template('upload.html');else:# file为上传表单的name属性值f = request.files['file'];fname = secure_filename(f.filename);ext = fname.rsplit('.')[-1];# 生成一个uuid作为文件名fileName = str(uuid.uuid4()) + "." + ext;# os.path.join拼接地址,上传地址,f.filename获取文件名f.save(os.path.join(app.config['UPLOAD_FOLDER'], fileName))return 'ok';

uuid.uuid4()生成一个uuid,可以理解为生成一个不会重复的字符串,当做文件名(避免文件名重复)。

上传页面,这里上传页面比较简陋,可以自行更改。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{# enctype设置不对字符编码 #}<form action="upload" method="POST" enctype="multipart/form-data"><input type="file" name="file" accept=".jpg, .png" /><input type="submit" /></form>
</body>
</html>

上传效果。


上传的路径设置的为项目目录下的static/upload下,上传成功后,可以看到upload文件夹下多了一张图片,名字为生成的uuid。

下载

定义一个视图函数,用于根据文件名下载文件。

# 图片下载
@app.route('/download/<filename>', methods=['GET'])
def download(filename):if request.method == "GET":path = os.path.isfile(os.path.join(app.config['UPLOAD_FOLDER'], filename));if path:return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)

输入http://localhost:5000/download/e19ddc98-d317-4f11-aad6-3e73677fe066.jpg地址即可下载对应的文件。

【注】一般开发中会把上传文件的信息,如文件名、路径等信息保存在数据库中。可以在上传文件视图函数中添加保存文件信息方法。

上传文件的完整代码:

from flask import Flask, render_template, request, send_from_directory
from werkzeug.utils import secure_filename
import os
import uuidapp = Flask(__name__)# 设置文件上传保存路径
app.config['UPLOAD_FOLDER'] = 'static/upload/'
# MAX_CONTENT_LENGTH设置上传文件的大小,单位字节
app.config['MAX_CONTENT_LENGTH'] = 1 * 1024 * 1024@app.route('/upload', methods=['GET', 'POST'])
def upload():if(request.method == 'GET'):return render_template('upload.html');else:f = request.files['file'];fname = secure_filename(f.filename);ext = fname.rsplit('.')[-1];# 生成一个uuid作为文件名fileName = str(uuid.uuid4()) + "." + ext;# os.path.join拼接地址,上传地址,f.filename获取文件名f.save(os.path.join(app.config['UPLOAD_FOLDER'], fileName))return 'ok';# 图片下载
@app.route('/download/<filename>', methods=['GET'])
def download(filename):if request.method == "GET":path = os.path.isfile(os.path.join(app.config['UPLOAD_FOLDER'], filename));if path:return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)if __name__ == '__main__':app.run()

除上述方法外,还可以在视图函数中把接收到的图片转为base64格式,存储在数据库中,这样就不用写入到本地了。

Flask 文件上传与下载相关推荐

  1. Angular 文件上传与下载

    Angular文件上传与下载 文件上传 方式1 使用NG ZORRO中的组件. 文件下载 方式1 直接下载 方式2 通过HTTP请求后端数据的方式进行下载 文件上传 方式1 使用NG ZORRO中的组 ...

  2. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

  3. Python实现阿里云aliyun服务器里的文件上传与下载

    Python实现阿里云服务器里的文件上传与下载 Python实现阿里云服务器里的文件上传与下载 背景: 正文: 预备环境: 构想: 实现: 注意: 结尾 018.4.15 背景: 老实说,因为现实的各 ...

  4. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息...

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  5. php从ftp下载文件到本地,php使用ftp实现文件上传与下载功能

    本文实例为大家分享了php ftp文件上传与下载的具体代码,供大家参考,具体内容如下 ftp文件上传 php自带有ftp操作的函数包,一个比较简单实现的ftp文件上传操作可以通过以下几个步骤来完成: ...

  6. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

    效果图 上传文件页面: 下载文件页面:   1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="t ...

  7. PHP文件上传,下载,Sql工具类!

    PHP文件上传,下载,Sql工具类! 对文件大小,文件类型 同名覆盖 中文转码的操作,可直接使用 前台 upload.html <!DOCTYPE html> <html> & ...

  8. WSE3.0构建Web服务安全(4):MTOM消息传输优化和文件上传、下载

    MTOM消息优化传输机制主要应用于大量数据的传输,很多文章中也直接得出结论:使用MTOM文件传输效率高.为什么MTOM的数据传输效率会比别的方式要高?MTOM真的如此完美吗,它有什么不足?什么情况下使 ...

  9. [转载]ASP.NET Core文件上传与下载(多种上传方式)

    ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...

最新文章

  1. 互联网还留给我们这些出路
  2. Java Spring MVC项目搭建(三)——“Hello World”
  3. Visual Question Answering概述
  4. OpenCASCADE:Foundation Classes内存管理
  5. 【数据结构与算法】之深入解析“最小覆盖子串”的求解思路与算法示例
  6. 25、jdbc操作数据库(2)
  7. 锦欣生殖获战略投资,华平、信银领投,红杉、药明康德跟投
  8. C#.NET验证码智能识别学习笔记---02-C#.Net中Using关键字的用法
  9. xgp游戏列表_Steam疯狂周三游戏推荐:动物百科全书
  10. java完整JDBC操作数据库
  11. leetcode771题
  12. 使用Tampermonkey进行JavaScript编程
  13. python高维数据可视化_用pandas中的parallel_coordinates可视化高维数据
  14. 数据仓库-事实表和维度表的设计
  15. 北风修仙笔记—2020年6月
  16. Axure RP9 制作平台界面
  17. 电商APP的流量及用户运营分析
  18. 数据库安全性和完整性考虑_您是否考虑过云安全性?
  19. 一个人的思想:漫谈技术社区
  20. 普华集团翟山鹰:从0到1玩转自媒体“小思路“ 轻松赚大钱

热门文章

  1. 「腾讯视频」微信小程序插件介绍
  2. 利用ai分析人形,移动鼠标爆头
  3. UVA1587 盒子 Box
  4. JS 数组删除某一个元素
  5. 微信公众平台签名php,微信公众平台消息接口开发(29)校验签名与消息响应合并_PHP教程...
  6. python实现判断路径是否存在,不存在则新建路径
  7. xlwt库的基础简介
  8. 触摸手势图标大全:48款触摸手势图标免费下载
  9. 教你免费安装官方 Apple Remote Desktop 洗白官方Remote Desktop for Mac
  10. jetbrains 非常好用的插件推荐