问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python bottle 怎么获得上传的文件

发布网友 发布时间:2022-04-24 11:24

我来回答

1个回答

热心网友 时间:2022-04-18 19:51

文件上传,需要注意的是前端html的form表单中,要添加 enctype="multipart/form-data"属性,否则无法上传文件。在后端,用request.files方法,获取到表单传上来的文件,首先把对象赋值给一个变量名,如upload,然后用save()的方法来保存到服务器中。upload.save(save_path,overwrite=True),save_path是保存文件的路径,overwrite=True是指如果服务器中已有同名文件存在,则覆盖。

文件上传代码:
[root@linuxyw bottle]# vim main.py

#/usr/bin/env python
#coding=utf-8

from bottle import route, run
from bottle import request
#定义上传路径
save_path = './upload'

#文件上传的HTML模板,这里没有额外去写html模板了,直接写在这里,方便点吧
@route('/upload')
def upload():
return '''
<html>
<head>
</head>
<body>
<form action"/upload" method="post" enctype="multipart/form-data">
<input type="file" name="data" />
<input type="submit" value="Upload" />
</form>
</body>
</html>
'''

#文件上传,overwrite=True为覆盖原有的文件,
#如果不加这参数,当服务器已存在同名文件时,将返回“IOError: File exists.”错误
@route('/upload', method = 'POST')
def do_upload():
upload = request.files.get('data')
upload.save(save_path,overwrite=True) #把文件保存到save_path路径下
return 'ok'

run(host='0.0.0.0', port=8080, debug=True)

相关的演示,可自己运行上面代码

此外,上传的文件对象,还有这二个属性
filename :文件名
content_type :文件类型
如上面的代码,上传文件的时候,要获取文件名,就要用upload.filename, 要获取文件类型就用upload.content_type。这二件很实用,一般要先修改上传的文件名后,再保存到服务器中,content_type则可以检测文件是什么类型的文件,如果符合我们的上传类型,才保存。
@route('/upload', method = 'POST')
def do_upload():
upload = request.files.get('data')
import os.path
name, ext = os.path.splitext(upload.filename) #用os.path.splitext方法把文件名和后缀相分离
upload.filename = ''.join(('123',ext)) #修改文件名
upload.save(save_path,overwrite=True) #把文件保存到save_path路径下
return u'上传成功 原文件名是:%s 文件后缀名是:%s \n 修改后的文件名是:%s' %(name,ext,''.join(('123',ext)))

用浏览器上传文件banner5_6.jpg后,成功显示:
上传成功 原文件名是:banner5_6 文件后缀名是:.jpg 修改后的文件名是:123.jpg
服务器文件结构:
[root@linuxyw bottle]# tree
.
├── main.py
├── upload
│ ├── 11.png
│ ├── 123.jpg
│ └── 23.png
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
光猫的注册灯一直闪没有网是怎么回事 ...PSP3000播放不起MP4格式的视频 我是6.60系统,PPA也放不起。还有就... AVC无法播放 PSP的电影,我放在相应的文件夹里,播放器也有.怎么还不行? psp ppa 无法播放 S1铁路啥意思 农历八月十五出生男孩名字 T-46轻型坦克参数资料(取自坦克世界) 美丽加芬有卸妆液吗 为什么股票涨跌很快 您好,有关于Python的问题,想要请教你,方便加您的可以直接沟通的方式吗... python2.7与python3.5的性能差别有多大 装文件的时候显示“c:&#92;users&#92;administrator&#92;appdata&#92;local&#92;temp”已损坏且无法读取。请运行chkdsk工具” python什么函数导致网络io 细腻戚风蛋糕怎么做好吃,细腻戚风蛋糕的家 细腻戚风蛋糕的做法,细腻戚风蛋糕怎么做好吃 口感细腻,柔软有弹性的戚风蛋糕,怎么做才能成功 键盘上的搜索键和返回键是那个 联想笔记本哪几个键盘是搜索键 电脑键盘中哪个是搜索键? 手冲咖啡豆红樱桃,它的由来或故事以及口味 吃黄瓜是喝咖啡算空腹吗 咖啡豆到底是什么?咖啡果的种子吗? 痛风吃咖啡苏打水和樱桃会降尿酸是真的吗 咖啡对您有好处吗? 咖啡红色水果? 咖啡果肉是什么味道? 终于知道咖啡果为什么被叫做咖啡樱桃 咖啡咖啡樱桃果肉提取物属于咖啡因吗 吃完樱桃后喝咖啡会怎样 考拉海购平台上的钱怎么兑换, python 怎样导入库 brew 网易红卡腾讯大王卡哪个划算 平安银行信用卡美国运通卡可以绑定苏宁金融吗? ipad第一次充电是用到自动关机再充吗 求:想给宝宝起名,姓:程,男孩起什么名?(最好出自易经),女孩起什么名?(最好出自诗经) 女诗经,男楚辞,文论语,武周易什么意思 银行卡里莫名收到宝付网络科技有限公司上海转的100元,是怎么回事? 银行卡莫名其妙收到海南惠多多网络科技有限公司的一笔钱是怎么回事? 君乐网络科技有限公司给我转账是什么钱? 浙江集远网络科技有限公司给我支付宝转钱了,为什么会给我钱,求好看的小姐姐或帅气的小哥哥解答_百度问一问 银行卡莫名收到一笔支付宝的转账,付款方是支付宝(中国)网络技术有限公司,我该怎么办、好担心? 为什么我会收到海南映也科技有限公司转账724.44? 江苏易贸网络科技有限公司突然转钱到我卡里是不是盗取私人财产_百度问一问 今天突然收到上海银联电子支付服务有限公司转账的3000,这是怎么回事? 江苏易贸网络科技有限公司突然转钱到我卡里 莫名其妙收到宁波和路计算机科技有限公司的一笔转账 - 信息提示 突然收到海南众合天下科技有限公司的几百块钱转账,是什么情况? 银行卡莫名收到一笔支付宝的转账,付款方是支付宝(中国)网络技术有限公司,我该怎么办、好担心_百度问一问