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

查看图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux的apache安装在哪个目录,在linux系统下apache的默认安装路径在哪

如果采用RPM包安装,安装路径应在 /etc/httpd目录下。(学习教程推荐:apache)apache配置文件:/etc/httpd/conf/httpd.conf 可以修改相关的访问路径及配置Apache模块路径:/usr/sbin/apachectl 启动模块web目录:/var/www/h…

车子Linux系统,Linux车载系统Automotive Grade Linux

【中关村在线软件资讯】7月8日消息:Linux在车载系统上,并不想落后于苹果、谷歌等竞争对手,这不,Linux最近也推出了可定制的车载系统平台——Automotive Grade Linux,旨在建立一个未来智能汽车系统的标准。Linux车载系统…

linux 进程带宽限制,在Linux中限制网络带宽使用

限制网络流量速率的一种方法是通过一个名为trickle的命令行工具。通过在程序运行时,预先加载一个速率限制 socket 库 的方法,trickle 命令允许你改变任意一个特定程序的流量。 trickle 命令有一个很好的特性是它仅在用户空间中运行,这意味着&…

gpedit msc组策略面板 win10在哪里_windows10的组策略在哪

展开全部请参看:网页链接第一种方法:无论32位还是64位,均可.我的是64位.How to Enable Group Policy Editor (gpedit.msc) In Windows 10 Home EditionLast Updated on: July 10, 2020 by Usman Khurshid这里下载的就是个批处理文件gpedit-enabler.bat,内容是:echo offpushd &q…

linux ping监控脚本,WINDOWS和LINUX下带时间的PING包监控脚本

WINDOWS使用方法;cscript ping.vbs 172.26.163.10 -t -l 1000Dim args, flag, unsuccOutargs""otherout""flag0If WScript.Arguments.count 0 ThenWScript.Echo "Usage: cscript ping.vbs [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]&q…

nx set 怎么实现的原子性_正确地使用Redis的SETNX实现锁机制

setNX,是set if not exists 的缩写,也就是只有不存在的时候才设置, 设置成功时返回 1 , 设置失败时返回 0 。可以利用它来实现锁的效果,但是很多人在使用的过程中都有一些问题没有考虑到。例如某个查询数据库的接口因为请求量比较…

linux img 内核启动,linux的启动流程(initrd.img)

http://www.ibm.com/developerworks/cn/linux/l-initrd.html一、从哪里到哪里本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换到硬盘的过程。描述起于:linux-2.6.11/init/main.c中函数 static int init(void * unused)描述止于&#x…

python的flask实现第三方登录怎么写_关于qq和新浪微博的第三方登陆|python|flask

前些日子研究了一下qq和新浪微博的第三方登陆的东西,发现其实难度并不大。来给大家分享一下我的经验和流程。不论是qq还是新浪微博的第三方登陆都是用了Oauth2.0授权流程,唯一不同的是qq多了一个openid的获取,多了一步。先介绍一下Oauth2.0的…

linux boot分区有什么用,/ boot分区的真正作用是什么?

射门很难引导...好吧...这确实是最难的部分。每次启动计算机时,它基本上都会重新适应。它熟悉其各个部分,并且满足每个部分都具有功能。但可以说,它每次都要从自己的引导程序中拉起自己。在设计启动过程时,技巧是逐步启动计算机。…

内存颗粒位宽和容量_64M的SDRAM颗粒 一般内存是多大的?

内存颗粒识别存储颗粒主要有这样的一些品牌:美国的Micron(美光)、德国的Infineon(英飞凌);韩国的SAMSUNG(三星)、HY(现代);日本的NEC(日本电气)、Hitachi(日立)、Mitsubishi(三菱)、Toshiba(东芝);台湾的EilteMT、ESMT(晶豪)、Etr…

linux ios开发环境,iOS开发环境搭建(Linux版)

iOS开发环境搭建(Linux版)2015-05-11 13:26:503057浏览必须申明的是,我们强烈建议大家在Mac下学习iOS应用开发,迫不得已才选择Windows和Linux。看到Linux的环境搭建步骤,早已凌乱。1. Ubuntu 10.10 iPhone Toolchain 4If you use Ubuntu 11.0…

pb9数据窗口中显示行数据与当前行区别_Hive的窗口函数

聚合函数(如sum()、avg()、max()等等)是针对定义的行集(组)执行聚集,每组只返回一个值。窗口函数也是针对定义的行集(组)执行聚集,可为每组返回多个值。如既要显示聚集前的数据,又要…

linux下shell脚本论文,Linux下Shell脚本编程

1、 shell脚本是什么它是一种脚本语言,并非编程语言。可以使用一些逻辑判断、循环等语法。可以自定义子函数,是系统命令的集合。shell脚本可以实现自动化运维,大大增加我们的工作效率。2、shell脚本结构以及执行方法开头行指定bash路径: #! /…

大数据 就业 缺口_大数据就业前景广阔,大数据人才紧缺,岗位缺口大

结果显示,绝大部分程序员年龄都不到35岁。超过一半的程序员年龄在23-30岁之间。当然程序员中间的“天才少年”的比例也不低。(三)程序员性别比例一直以来,程序员这一群体主要是男性为主。在本次调查中发现,程序员群体中男女比例超过了12:1。如…

linux硬盘磁盘标识符 0,Linux 磁盘与文件系统管理

Linux 磁盘与文件系统管理一 linux 磁盘(一)磁盘相关知识简介Linux 下用来存储数据的设备有:内存(RAM)与硬盘(Disk)两种;内存访问速度快,但价格昂贵;硬盘价格便宜,但访问速度慢目前市场上常见的磁盘有硬盘(Hard Disk,HD),软盘(Floppy Disk,FD),光盘(CompactDisk,CD),磁带(Tape)…

重构 pdf_三维温度场的重构方法,更准确地监测储能系统的电池堆内部温度

储能系统是微电网的核心组成部分,其热管理对于微电网的安全与稳定具有重要意义。相对于表面温度,电池堆内部温度场更有意义。针对红外热像仪无法监测电池堆内部温度场的问题,浙江工业大学分布式能源与微网研究所、浙江工业大学机械工程学院的…

linux 下停止监听程序,Linux下启动Oracle服务和监听程序步骤

Linux下启动Oracle服务和监听程序启动和关闭步骤整理如下:1、安装oracle;2、创建oracle系统用户;3、/home/oracle下面的.bash_profile添加几个环境变量:ORACLE_SID,ORACLE_BASE,ORACLE_HOME:4、启动步骤:注…

2016 server sql 错误53_MS SQL Server 错误53 错误17是什么?如何解决

展开全部53是安装程序e68a8462616964757a686964616f31333335336532被挂起1、先运行你的安装程序,当提示挂起时,点击“确定”,切记,不要退出安装程序,用ALTTal键切换,点击“开始》运行”,输入“r…

linux找不到光口,以太坊查看命令_求助 输入ifconfig命令 后看不到eth0但是有eth3和eth4-CSDN论坛_区块链百科...

Ⅰ 怎么查看 /etc/sysconfig/network-scripts/ifcfg-eth0在你的这串英文前面加个 cat 空格就行Ⅱ 在linux下如何通过命令查网卡配置在linux下通过命令查网卡配置的方法如下:1、首先在电脑上打开Linux系统,然后进入Linux系统的终端窗口。Ⅲ 为什么用命令e…

开发物体识别桌、_想用人工智能实现安全风险管控?快来试试EasyMonitor一站式视频监控开发平台...

随着 AI 技术的日益成熟,越来越多的传统企业都希望用 AI 能力升级原有的管理系统,进而智能化解决业务问题、提高人效。尤其在安全生产领域中,虽然视频监控的覆盖率逐年提升,但大多企业还在沿用人工抽检的方式对设备、区域、人员进…