一、Python-Flask-文件上传

1、简化版文件上传

创建目录:

cd 5-4

mkdir -p uploads #必须先创建uploads文件夹。

upload.html

Title

文件上传示例

app.py

import os

from flask import Flask, render_template, send_from_directory, request, jsonify, make_response

import time

app = 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('/')

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.filename

ext = 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": "上传失败"})

# file download

@app.route("/download/")

def downloader(filename):

dirpath = os.path.join(app.root_path, 'upload') # 这里是下在目录,从工程的根目录写起,比如你要下载static/js里面的js文件,这里就要写“static/js”

# return send_from_directory(dirpath, filename, as_attachment=False) # as_attachment=True 一定要写,不然会变成打开,而不是下载

return send_from_directory(dirpath, filename, as_attachment=True) # as_attachment=True 下载

# show photo

@app.route('/show/', methods=['GET'])

def show_photo(filename):

file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])

if request.method == 'GET':

if filename is None:

pass

else:

image_data = open(os.path.join(file_dir, '%s' % filename), "rb").read()

response = make_response(image_data)

response.headers['Content-Type'] = 'image/png'

return response

else:

pass

if __name__ == '__main__':

app.run(debug=True)

访问网站:

2、优化版文件上传

2.1. 自动创建upload文件夹。

upload.html

Title

上传文件

提交

app.py

import os

from flask import Flask, render_template, send_from_directory, request, jsonify

import time

app = 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('/')

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.filename

ext = 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": "上传失败"})

# file download

@app.route("/download/")

def downloader(filename):

dirpath = os.path.join(app.root_path, 'upload') # 这里是下在目录,从工程的根目录写起,比如你要下载static/js里面的js文件,这里就要写“static/js”

# return send_from_directory(dirpath, filename, as_attachment=False) # as_attachment=True 一定要写,不然会变成打开,而不是下载

return send_from_directory(dirpath, filename, as_attachment=True) # as_attachment=True 下载

if __name__ == '__main__':

app.run(debug=True)访

1.2.访问网址

上传成功,返回值

下载文件

http://127.0.0.1:5000/download/1597310075.png

查看图片

python flask上传文件_Python-Flask-文件上传相关推荐

  1. python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单

    很多selenium学习者被浏览器弹出的文件上传.下载框折磨的痛不欲生,今天博主就带你们轻松搞定上传和下载问题. 上传 上传弹框 文件上传是所有UI自动化测试都要面对的一个头疼问题,要处理这个问题,我 ...

  2. python程序怎样在手机上_python手机文件怎么上传至电脑?

    本文讲解python的一个内置文件传输下载器,可以用来在局域网内进行文件传输,当然可能有人会问,我用微信QQ也能传,为什么还要用python来传输下载?在此,其实我个人感觉的是,这种操作更简单,省了时 ...

  3. python以读写方式打开文件_python读写文件操作详细介绍【传智播客】

    Python文件的打开或创建可以使用函数open().该函数可以指定处理模式,设置打开的文件为只读.只写或可读写状态.open()的声明如下所示. open(file, mode='r', buffe ...

  4. python flask框架是什么_Python Flask框架详解

    原博文 2020-04-08 23:33 − 记录请求使用的HTTP方法 Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展,都需要用第三方的扩展来实现,比如可以用 Flask 扩展加入O ...

  5. python如何使用文件_Python的文件操作

    文件的操作,归根结底就只有两种:打开文件.操作文件 一.打开文件:文件句柄= open('文件路径','模式') python中打开文件有两种方式,即:open(...) 和  file(...),本 ...

  6. python创建多个文件_Python创建文件夹与文件的快捷方法

    这篇文章主要给大家介绍了关于Python创建文件夹与文件的快捷方法以及批量创建文件夹的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学 ...

  7. python压缩文件夹下的所有文件_python压缩文件夹内所有文件为zip文件的方法

    这里讨论使用Python解压如下五种压缩文件: .gz .tar .tgz .zip .rar 简介gz: 即gzip,通常只能压缩一个文件.与tar结合起来就可以实现先打包,再压缩. tar: li ...

  8. python windows和linux路径_python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)...

    问题: python脚本涉及到复制文件,而我们需要兼容Windows.linux和mac环境 (Windows和linux的路径分隔符不同:通过os.path.sep查看分隔符) 如果用[路径名+os ...

  9. python编程头文件_python头文件怎么写

    本文主要以python2为例.首先介绍一下Python头文件的编程风格,然后再给大家详细介绍import部分的基本用法.这两个部分就是Python中头文件的组成模块. 编程风格#!/usr/bin/e ...

  10. python def return 文件_python基础-文件处理与函数

    1. 文件处理 1.1 文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 1.2 文件读取模式r r文本模式的读,在文件不存在,不会创建新文件 f = ...

最新文章

  1. .net知识和学习方法系列(十五)类型,对象,堆栈和托管堆
  2. 【PHPWord】页面添加图片水印
  3. Centos7.2部署DHCP服务
  4. EtherCAT伺服驱动器-如何选择硬件开发方案
  5. mysql标识列从一开始_mysql中标识列是什么意思有什么用
  6. 1 利用Anaconda完美解决Python 2与python 3的共存问题
  7. 2019厦门大学信息学院人工智能/智能科学与技术系夏令营(非计算机系)
  8. Android Camera2 实现连拍
  9. java微信公众平台开发教程分享
  10. IDEA怎样自定义 Touch Bar
  11. 芝诺数据高校产学研用成果展示|携程酒店(北京)数据分析报告
  12. Day16-01 P71 面向对象12什么是多态 P72 对象13:instanceof和类型转换 P73 static关键字详解 P74 抽象类 P75 接口的定义与实现 P76N种内部类
  13. html仪表盘模版,【Minton v1.0.0】管理后台仪表盘HTML5模板
  14. 单代号网络图计算例题_钣金展开计算210例节省放样场地,不理解公式也能完成展开计算!...
  15. C# 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数
  16. 农村小伙艰难的复工之路
  17. C++/MFC-几种常用控件
  18. UTF-8字符C2A0引起的问题
  19. Android Accessibility 安全性研究报告
  20. stm8s开发(三) UART的使用:串口通信!

热门文章

  1. win10万能触摸屏驱动_教你win10系统设置usb鼠标驱动的方法
  2. 2013年上半年全国高等学校(安徽考区)计算机水平考试试卷,2013年上半年全国高等学校(安徽考区)计算机水平考试试卷...
  3. 浙大计算机学院朱建科,浙江大学计算机科学与技术学院导师介绍:朱建科
  4. android权限 启动失败,Android 6.0打开失败:EACCES(权限被拒绝)
  5. python处理数据0和负数跳过_Python第十一章-常用的核心模块03-json模块
  6. python统计分析--2.预分析:异常值、缺失值处理
  7. 他不怕被拒绝_不怕被拒绝,这几大星座男追人时最有耐心
  8. 北邮dsp matlab实验,北京邮电大学《数字信号处理》门爱东-DSP实验.pdf
  9. 最简单的c语言的编程题目,编程列入考题
  10. 从数据结构到算法:图网络方法初探