版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/qq_25730711/article/details/53643758

目录(?)[+]

废话不说,看代码

上传文件

import os
from flask import Flask, render_template, send_from_directory, request, jsonifyapp = Flask(__name__)UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER  # 设置文件上传的目标文件夹
basedir = os.path.abspath(os.path.dirname(__file__))  # 获取当前项目的绝对路径
ALLOWED_EXTENSIONS = set(['txt', 'png', 'jpg', 'xls', 'JPG', 'PNG', 'xlsx', 'gif', 'GIF'])  # 允许上传的文件后缀# 判断文件是否合法
def allowed_file(filename):return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS# 具有上传功能的页面
@app.route('/test/upload')
def upload_test():return render_template('upload.html')@app.route('/api/upload', methods=['POST'], strict_slashes=False)
def api_upload():file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])  # 拼接成合法文件夹地址if not os.path.exists(file_dir):os.makedirs(file_dir)  # 文件夹不存在就创建f=request.files['myfile']  # 从表单的file字段获取文件,myfile为该表单的name值if f and allowed_file(f.filename):  # 判断是否是允许上传的文件类型fname=f.filenameext = fname.rsplit('.', 1)[1]  # 获取文件后缀unix_time = int(time.time())new_filename = str(unix_time)+'.'+ext   # 修改文件名f.save(os.path.join(file_dir, new_filename))  #保存文件到upload目录return jsonify({"errno": 0, "errmsg": "上传成功"})else:return jsonify({"errno": 1001, "errmsg": "上传失败"})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form id="form1" method="post" action="/api/upload" enctype="multipart/form-data"><div><input id="File1" type="file" name="myfile"/>  <!--后台代码中获取文件是通过form的name来标识的--><input type="submit">提交</input></div>
</form>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

来看一下效果

  1. 打开上传页 

2.选择文件 

3.上传成功 
 

文件下载

@app.route("/download/<path:filename>")
def downloader(filename):dirpath = os.path.join(app.root_path, 'upload')  # 这里是下在目录,从工程的根目录写起,比如你要下载static/js里面的js文件,这里就要写“static/js”return send_from_directory(dirpath, filename, as_attachment=True)  # as_attachment=True 一定要写,不然会变成打开,而不是下载
  • 1
  • 2
  • 3
  • 4

看一下效果

1.地址是这样子的 
 
2.下载完成 

感谢阅读

# coding=utf-8
import os,time
from flask import Flask, render_template, send_from_directory, request, jsonifyapp = Flask(__name__)UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER  # 设置文件上传的目标文件夹
basedir = os.path.abspath(os.path.dirname(__file__))  # 获取当前项目的绝对路径
ALLOWED_EXTENSIONS = set(['txt', 'png', 'jpg', 'xls', 'JPG', 'PNG', 'xlsx', 'gif', 'GIF'])  # 允许上传的文件后缀

# 判断文件是否合法
def allowed_file(filename):return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS# 具有上传功能的页面
@app.route('/test/upload')
def upload_test():return render_template('upload2.html')@app.route('/api/upload', methods=['POST'], strict_slashes=False)
def api_upload():file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])  # 拼接成合法文件夹地址
    if not os.path.exists(file_dir):os.makedirs(file_dir)  # 文件夹不存在就创建
    f=request.files['myfile']  # 从表单的file字段获取文件,myfile为该表单的name值
    if f and allowed_file(f.filename):  # 判断是否是允许上传的文件类型
        fname=f.filenameext = fname.rsplit('.', 1)[1]  # 获取文件后缀
        unix_time = int(time.time())new_filename = str(unix_time)+'.'+ext   # 修改文件名
        f.save(os.path.join(file_dir, new_filename))  #保存文件到upload目录

        return jsonify({"errno": 0, "errmsg": "上传成功"})else:return jsonify({"errno": 1001, "errmsg": "上传失败"})@app.route("/download/<path:filename>")
def downloader(filename):print "file",filenamedirpath = os.path.join(app.root_path, 'upload')  # 这里是下在目录,从工程的根目录写起,比如你要下载static/js里面的js文件,这里就要写“static/js”
    return send_from_directory(dirpath, filename, as_attachment=True)  # as_attachment=True 一定要写,不然会变成打开,而不是下载

if __name__ == '__main__':app.run()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form id="form1" method="post" action="/api/upload" enctype="multipart/form-data">
    <div>
        <input id="File1" type="file" name="myfile"/>  <!--后台代码中获取文件是通过form的name来标识的-->
        <input type="submit">提交</input>
    </div>
    <p>
    <a href="http://127.0.0.1:5000/download/3.txt" download="33.txt">Download file</a>
    </p>
</form>
</body>
</html>

upload2.html 用过链接也可以

flask-文件上传/下载相关推荐

  1. 教你如何实现c#文件上传下载功能

    简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...

  2. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  3. SpringMVC整合fastdfs-client-java实现web文件上传下载

    为什么80%的码农都做不了架构师?>>>    版权声明:本文为博主原创文章,转载请标明出处(http://blog.csdn.net/wlwlwlwl015)Thanks. 目录( ...

  4. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  5. 文件上传 java web_JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  6. ASP.NET中文件上传下载方法集合

    asp.net 2008-08-23 21:10:35 阅读0 评论0   字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...

  7. salesforce 零基础学习(四十二)简单文件上传下载

    项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...

  8. ASP.NET中常用的文件上传下载方法

    ASP.NET中常用的文件上传下载方法 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务 ...

  9. java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载

    java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...

  10. struts2教程--实现文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

最新文章

  1. 一文了解卷积神经网络基础,建议收藏
  2. STM32串口中断接收方式详细比较
  3. Windows驱动开发学习笔记(三)—— 内核空间内核模块
  4. python 如何判断一个数为整数?(判断整数,没有小数)(取余)判断整型 isinstance()
  5. python网络爬虫文献综述_python网络爬虫综述
  6. Objective-C中block的底层原理
  7. mysql savepoint作用_savepoint原理
  8. WCF 4.0 进阶系列 – 第十六章 使用回调合约发布和订阅事件(第二部分)
  9. ContentPresenter元素
  10. tomcat 点击startup.bat一闪而过
  11. php有哪些优化技巧
  12. NtQuerySystemInformation的使用
  13. Android中Style详解
  14. Flutter笔记--Sliver用法
  15. 各平台安装OpenCV
  16. 【已解决】macbook软件卸载了图标还在launchpad上怎么办?一分钟搞定!
  17. 计算机视觉论文-2021-06-04
  18. resultful风格使用方式
  19. Oracle组织架构
  20. MySQL的varchar水真的太深了——InnoDB记录存储结构

热门文章

  1. 【Shell】sed实例之第三部分
  2. transformer中attention计算方式_Transformer在推荐模型中的应用总结
  3. (libgdx学习)TextInputListener
  4. Android 网络开发框架的选择
  5. android手势创建及识别
  6. CODING 最佳实践:快课网研发效能提升之路 1
  7. 第00次博文——我对Python的期待与思考
  8. Vim Vundle YouCompleteMe
  9. android 从网络加载图片并显示
  10. [Servletamp;JSP] 从JSP到Servlet