tornado 上传文件实例
使用tornado编程,有上传文件需求时一般有两种方案,一种是tornado自带的方法,一种是借助反向代理,比如nginx的上传模块.在业务需求简单的时候,用tornado自带的方法不失为一种高效的选择.
下面的代码实现了简单的文件上传,将上传的文件保存在配置文件规定的静态文件存放目录的子目录img下.
html代码
<form class="form-post" action="/">
{% raw xsrf_form_html() %}
<input type="text" name="Key">
<input type="file" name="logo">
<button type="submit">提交</button>
</form>
javascript代码
$(document).delegate('.form-post','submit', function() {
var form = $(this);
var formData = new FormData(this)
$.ajax({
type : 'POST',
url : form.attr('action'),
data : formData,
dataType : 'json',
cache : false,
contentType: false,
processData: false,
success : function(result) {
//成功后执行的代码
}
});
return false
});
python代码
import os
import uuid
//略去控制器声明等,只显示关键代码
path = os.path.join(super(ThisHandler, self).settings['static_path'],'img')
abspath = os.path.abspath(path)
logo = self.request.files['logo'][0]
filename = logo['filename']
'''
filename = filename.split('.').pop(0)+'_'+str(uuid.uuid4())+'.'+filename.split('.').pop()
将文件名进行唯一重命名处理,防止覆盖
'''
filebody = logo['body']
savename = os.path.join(abspath,filename)
with open(savename,'wb') as f:
f.write(filebody)