tornado文件上传服务器,如何在Python中利用tornado实现一个文件上传功能

如何在Python中利用tornado实现一个文件上传功能

发布时间:2021-01-05 15:18:18

来源:亿速云

阅读:101

作者:Leah

这期内容当中小编将会给大家带来有关如何在Python中利用tornado实现一个文件上传功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Tornado是一种 Web 服务器软件的开源版本。Tornado 和主流Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

得利于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。

在web开发过程中,文件上传是经常用到的功能,比如上传附件,上传照片等。下面我们来介绍一下利用tornado 来实现简单的文件上传功能。

普通上传# coding: utf-8

import tornado.ioloop

import tornado.web

import shutil

import os

import json

class FileUploadHandler(tornado.web.RequestHandler):

def get(self):

self.write('''

Upload File

''')

def post(self):

ret = {'result': 'OK'}

upload_path = os.path.join(os.path.dirname(__file__), 'files') # 文件的暂存路径

file_metas = self.request.files.get('file', None) # 提取表单中‘name'为‘file'的文件元数据

if not file_metas:

ret['result'] = 'Invalid Args'

return ret

for meta in file_metas:

filename = meta['filename']

file_path = os.path.join(upload_path, filename)

with open(file_path, 'wb') as up:

up.write(meta['body'])

# OR do other thing

self.write(json.dumps(ret))

app = tornado.web.Application([

(r'/file', FileUploadHandler),

])

if __name__ == '__main__':

app.listen(8080)

tornado.ioloop.IOLoop.instance().start()

采用ajax上传

采用ajax上传,需要修改一下前端发送请求的方式。可参照如下方式:

Upload File

$('#submit').click(function(){

var form = $('form')[0];

var formData = new FormData(form);

formData.append('image', $('input[type=file]')[0].files[0]);

$.ajax({

url: '/file/upload',

data: formData,

type: 'POST',

contentType: false,

processData: false,

success: function(data){

var obj = jQuery.parseJSON(data);

alert(obj.result);

// TODO

},

error: function(data){

var obj = jQuery.parseJSON(data);

alert(data.result);

}

})

});

注意

tornado处理文件上传时,会把整个文件放在内存中。

如果有上传大文件的需求,一般会使用nginx的文件上传模块 (第三方模块,需要编译)。

上述就是小编为大家分享的如何在Python中利用tornado实现一个文件上传功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值