python flask上传文件_Python-Flask-文件上传
一、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-文件上传相关推荐
- python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单
很多selenium学习者被浏览器弹出的文件上传.下载框折磨的痛不欲生,今天博主就带你们轻松搞定上传和下载问题. 上传 上传弹框 文件上传是所有UI自动化测试都要面对的一个头疼问题,要处理这个问题,我 ...
- python程序怎样在手机上_python手机文件怎么上传至电脑?
本文讲解python的一个内置文件传输下载器,可以用来在局域网内进行文件传输,当然可能有人会问,我用微信QQ也能传,为什么还要用python来传输下载?在此,其实我个人感觉的是,这种操作更简单,省了时 ...
- python以读写方式打开文件_python读写文件操作详细介绍【传智播客】
Python文件的打开或创建可以使用函数open().该函数可以指定处理模式,设置打开的文件为只读.只写或可读写状态.open()的声明如下所示. open(file, mode='r', buffe ...
- python flask框架是什么_Python Flask框架详解
原博文 2020-04-08 23:33 − 记录请求使用的HTTP方法 Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展,都需要用第三方的扩展来实现,比如可以用 Flask 扩展加入O ...
- python如何使用文件_Python的文件操作
文件的操作,归根结底就只有两种:打开文件.操作文件 一.打开文件:文件句柄= open('文件路径','模式') python中打开文件有两种方式,即:open(...) 和 file(...),本 ...
- python创建多个文件_Python创建文件夹与文件的快捷方法
这篇文章主要给大家介绍了关于Python创建文件夹与文件的快捷方法以及批量创建文件夹的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学 ...
- python压缩文件夹下的所有文件_python压缩文件夹内所有文件为zip文件的方法
这里讨论使用Python解压如下五种压缩文件: .gz .tar .tgz .zip .rar 简介gz: 即gzip,通常只能压缩一个文件.与tar结合起来就可以实现先打包,再压缩. tar: li ...
- python windows和linux路径_python复制文件,路径不存在问题(Windows和linux路径分隔符不统一)...
问题: python脚本涉及到复制文件,而我们需要兼容Windows.linux和mac环境 (Windows和linux的路径分隔符不同:通过os.path.sep查看分隔符) 如果用[路径名+os ...
- python编程头文件_python头文件怎么写
本文主要以python2为例.首先介绍一下Python头文件的编程风格,然后再给大家详细介绍import部分的基本用法.这两个部分就是Python中头文件的组成模块. 编程风格#!/usr/bin/e ...
- python def return 文件_python基础-文件处理与函数
1. 文件处理 1.1 文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 1.2 文件读取模式r r文本模式的读,在文件不存在,不会创建新文件 f = ...
最新文章
- .net知识和学习方法系列(十五)类型,对象,堆栈和托管堆
- 【PHPWord】页面添加图片水印
- Centos7.2部署DHCP服务
- EtherCAT伺服驱动器-如何选择硬件开发方案
- mysql标识列从一开始_mysql中标识列是什么意思有什么用
- 1 利用Anaconda完美解决Python 2与python 3的共存问题
- 2019厦门大学信息学院人工智能/智能科学与技术系夏令营(非计算机系)
- Android Camera2 实现连拍
- java微信公众平台开发教程分享
- IDEA怎样自定义 Touch Bar
- 芝诺数据高校产学研用成果展示|携程酒店(北京)数据分析报告
- Day16-01 P71 面向对象12什么是多态 P72 对象13:instanceof和类型转换 P73 static关键字详解 P74 抽象类 P75 接口的定义与实现 P76N种内部类
- html仪表盘模版,【Minton v1.0.0】管理后台仪表盘HTML5模板
- 单代号网络图计算例题_钣金展开计算210例节省放样场地,不理解公式也能完成展开计算!...
- C# 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数
- 农村小伙艰难的复工之路
- C++/MFC-几种常用控件
- UTF-8字符C2A0引起的问题
- Android Accessibility 安全性研究报告
- stm8s开发(三) UART的使用:串口通信!
热门文章
- win10万能触摸屏驱动_教你win10系统设置usb鼠标驱动的方法
- 2013年上半年全国高等学校(安徽考区)计算机水平考试试卷,2013年上半年全国高等学校(安徽考区)计算机水平考试试卷...
- 浙大计算机学院朱建科,浙江大学计算机科学与技术学院导师介绍:朱建科
- android权限 启动失败,Android 6.0打开失败:EACCES(权限被拒绝)
- python处理数据0和负数跳过_Python第十一章-常用的核心模块03-json模块
- python统计分析--2.预分析:异常值、缺失值处理
- 他不怕被拒绝_不怕被拒绝,这几大星座男追人时最有耐心
- 北邮dsp matlab实验,北京邮电大学《数字信号处理》门爱东-DSP实验.pdf
- 最简单的c语言的编程题目,编程列入考题
- 从数据结构到算法:图网络方法初探