A-A+

python bottle 框架基础教程:文件上传

2015年05月26日 bottle 评论 1 条 阅读 8,567 views 次

 

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

 

文件上传代码:

  1. [root@linuxyw bottle]# vim main.py    
  2. #/usr/bin/env python
  3. #coding=utf-8
  4. from bottle import route, run
  5. from bottle import request
  6. #定义上传路径
  7. save_path = './upload'
  8. #文件上传的HTML模板,这里没有额外去写html模板了,直接写在这里,方便点吧
  9. @route('/upload')
  10. def upload():
  11.     return '''
  12.         <html>
  13.             <head>
  14.             </head>
  15.             <body>
  16.                 <form action"/upload" method="post" enctype="multipart/form-data">
  17.                     <input type="file" name="data" />
  18.                     <input type="submit" value="Upload" />
  19.                 </form>
  20.             </body>
  21.         </html>
  22.     '''
  23. #文件上传,overwrite=True为覆盖原有的文件,
  24. #如果不加这参数,当服务器已存在同名文件时,将返回“IOError: File exists.”错误
  25. @route('/upload', method = 'POST')
  26. def do_upload():
  27.     upload   = request.files.get('data')
  28.     upload.save(save_path,overwrite=True)  #把文件保存到save_path路径下
  29.     return 'ok'
  30. run(host='0.0.0.0', port=8080, debug=True)

 

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

 

此外,上传的文件对象,还有这二个属性

filename  :文件名

content_type :文件类型

如上面的代码,上传文件的时候,要获取文件名,就要用upload.filename, 要获取文件类型就用upload.content_type。这二件很实用,一般要先修改上传的文件名后,再保存到服务器中,content_type则可以检测文件是什么类型的文件,如果符合我们的上传类型,才保存。

  1. @route('/upload', method = 'POST')
  2. def do_upload():
  3.     upload = request.files.get('data')
  4.     import os.path
  5.     name, ext = os.path.splitext(upload.filename)  #用os.path.splitext方法把文件名和后缀相分离
  6.     upload.filename = ''.join(('123',ext))        #修改文件名
  7.     upload.save(save_path,overwrite=True)  #把文件保存到save_path路径下
  8.     return u'上传成功  原文件名是:%s  文件后缀名是:%s \n 修改后的文件名是:%s' %(name,ext,''.join(('123',ext)))

 

用浏览器上传文件banner5_6.jpg后,成功显示:

上传成功 原文件名是:banner5_6 文件后缀名是:.jpg 修改后的文件名是:123.jpg

服务器文件结构:

  1. [root@linuxyw bottle]# tree
  2. .
  3. ├── main.py
  4. ├── upload
  5. │   ├── 11.png
  6. │   ├── 123.jpg  
  7. │   └── 23.png

 

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

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

SVN请跳转至:教程总目录

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

 

关键词:

1 条留言  访客:0 条  博主:0 条   引用: 1 条

来自外部的引用: 1 条

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

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: