Tornado 与文件上传

来源:互联网 发布:大叔与女孩的网络电影 编辑:程序博客网 时间:2024/05/18 04:30
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>


0 0
原创粉丝点击