您的位置:首页 > 其它

Tornado 与文件上传

2013-12-18 22:40 387 查看
Tornado 自身是不支持大文件上传的。对于接收到的文件,它会把文件内容保存在内存里,而不是像 PHP 那样保存在临时文件里。这样对于大文件,问题很明显了——内容不够。所以,Tornado 上传文件的大小限制在 100M 以下了。Tornado 官方建议使用 nginx 的上传模块来处理文件上传。
http://www.afewords.com/book/502e5cff3725176a91000004/catalog/16
import tornado.ioloop

import tornado.web

UPLOAD_FILE_PATH = '/path/to/files/'

class MainHandler(tornado.web.RequestHandler):

def get(self):

args = dict(username = 'visitor')

self.render('home.html', **args)

class UploadHandler(tornado.web.RequestHandler):

def post(self):

username = self.get_argument('username', 'anonymous')

if self.request.files.get('uploadfile', None):

uploadFile = self.request.files['uploadfile'][0]

filename = uploadFile['filename']

fileObj = open(UPLOAD_FILE_PATH+username+filename, 'wb')

fileObj.write(uploadFile['body'])

self.redirect('/')

application=tornado.web.Application([(r'/',MainHandler),('/upload', UploadHandler) ],

template_path = 'templates',

debug = True

)

if __name__=='__main__':

application.listen(8888)

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

<!DOCTYPE HTML>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>upload file demo</title>

</head>

<body>

<form action="/upload" method="post" enctype="multipart/form-data">

<input type="text" name="username" value="{{username}}"/>

<input type="file" name="uploadfile" />

<input type="submit" value="upload"/>

</form>

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: