文件上传,需要注意的是前端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 '''

'''

#文件上传,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

如果有不懂的,可以看bottle官网文档

官方文档:http://www.bottlepy.org/docs/dev/index.html

SVN请跳转至:教程总目录

这些代码已提交到SVN中,有需要的朋友可在SVN下载

bottle 文件服务器,python bottle 框架基础教程:文件上传 | linux系统运维相关推荐

  1. python实现TCP远程服务器文件上传,下载系统

    TCP服务器代码如下: from socket import *def client_upload(client_socket):"""上传数据""& ...

  2. 千峰云计算linux教程650集,linux系统运维从入门到精通教程(Linux安装极速入门,零基础必备)

    第一天 1. 完成VMware下载,centos7下载,完成配置,获得模拟服务器一台. 2. 使用root登录. 服务器 (可以当初普通计算机,与普通的计算机内部结构相差不大) VMware是安装虚拟 ...

  3. SSM框架使用Layui文件上传插件实现多文件上传(多文件列表)

    SSM框架使用Layui文件上传插件实现多文件上传(多文件列表) pom.xml文件的配置 想要实现SSM框架实现多文件上传,必要的jar包必须要在pom.xml文件中引入.如下: <!--co ...

  4. 基于python的selenium两种文件上传方式

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径. 方法二.非input标签上传 这种上传方式需要借助第三方工具,主要有以下三种情 ...

  5. 【代码审计-2】PHP框架MVC类文件上传断点测试挖掘

    1.文件上传漏洞挖掘: (1)关键字搜索(函数.键字.全局变量等):比如$_FILES,move_uploades_file等 (2)应该功能抓包:寻找任何可能存在上传的应用功能点,比如前台会员中心, ...

  6. 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...

  7. 文件上传linux服务器,Linux 文件上传Linux服务器

    进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...

  8. Linux系统运维工程师学习(基础 一)

    Linux系统运维工程师学习(基础 一) 1.1计算机软硬件与操作系统介绍 计算机系统的组成 硬件系统 主机(中央处理器,内部处理器) 外部设备(I/O设备接口,外部存储器,输入输出设备) 软件系统 ...

  9. python bottle框架 运维_python bottle框架(WEB开发、运维开发)教程 | linux系统运维...

    教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...

最新文章

  1. 头条面试官:NIO 是不是就是I/O多路复用?我:不是
  2. 什么是三极管的倒置状态及其作用!
  3. 技术解析:如何用pyecharts绘制时间轮播图
  4. 虚拟化记录--No.1
  5. java 接口隔离_《Java设计模式及实践》—1.5.4 接口隔离原则
  6. 2019年2月25日 Range Sum of BST
  7. BootStrap修改modal模态框的宽度
  8. Delphi2010正式版的代码格式化及自动完成
  9. 于的繁体字有几种写法_写字繁体字有几种写法 , 辈 字 用繁体字有几种写法?...
  10. 视频测试皮肤的软件,皮肤检测仪(LEIM魔镜仪)安装及操作视频
  11. 谷歌浏览器插件 - 为 Microsoft Bing 搜索引擎首页添加一个【保存背景图片】的按钮(版本 1)
  12. 喜迎进博会 欢聚环球港 共享消费城——2021环球商业年会暨城市综合体论坛圆满举行
  13. 如何删除桌面的回收站图标
  14. 无线传感器网络期末复习知识点总结资料
  15. java web 下拉列表_关于web中下拉列表的几种实现方法
  16. 代谢组学通路富集分析
  17. 价格时序预测-LSTM
  18. 谷歌浏览器怎么样切换为原来的经典主题皮肤
  19. Android商城开发----点击左侧分类列表右侧更新对应列表内容
  20. 2019年如何抓住社交电商的风口

热门文章

  1. iPhone 近距离传感器的使用
  2. python3数据库分类和比较(入门)
  3. 【生物信息学】基于SparCC, MENA, LSA, CoNet构建微生物相互作用网络
  4. 微课在中职计算机基础中的应用,微课在中职学校计算机应用基础课程中的应用.pdf...
  5. 【二分】Kevin喜欢零
  6. 生信科技爱好者祝大家元宵快乐!
  7. 四章——Nginx网站服务(应用——linux防护与群集)
  8. 伯颜自留后路,项羽破釜沉舟。谁又是对的呢
  9. 用户称新iMac2020图形问题?你的iMac中招没有
  10. CoreData用法二:NSFetchedResultsController实例操作与讲解