Tornado 上传文件及存储

上传文件

import tornado.ioloop  
import tornado.web  
  
  
  
class MainHandler(tornado.web.RequestHandler):  
    def get(self):  
        self.render('/home/zz/index.html')  
  
class UploadHandler(tornado.web.RequestHandler):  
    def post(self):  
        if self.request.files:  
            myfile = self.request.files['myfile'][0]  
            fin = open("/home/zz/in.jpg","w")    
            print "success to open file"  
            fin.write(myfile["body"])  
            fin.close()  
  
application=tornado.web.Application([(r'/',MainHandler),(r'/upload', UploadHandler) ]  
        )  
  
if __name__=='__main__':  
    application.listen(2033)  
    tornado.ioloop.IOLoop.instance().start()  

Page

<html>  
  <body>  
    <form action="/upload" enctype="multipart/form-data" method="post">  
    <input name="myfile" type="file">  
    <input type="submit" value="Submit">  
    </form>  
</body></html>  

其中Python中UploadHandler中的“/upload”一定要出现在index.html中的表单的action属性中,必须一致。

action和methhod 都是对当前form的提交进行设置

action="提交到地址以及相关参数"

method="设置提交方式"

转载于:https://my.oschina.net/shawnplaying/blog/702687

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中使用Tornado进行多线程分片上传文件的步骤如下: 1. 导入所需的模块: ```python import os import tornado.ioloop import tornado.web from concurrent.futures import ThreadPoolExecutor ``` 2. 创建一个自定义的RequestHandler类,并指定使用线程池处理请求: ```python class UploadHandler(tornado.web.RequestHandler): executor = ThreadPoolExecutor(max_workers=4) # 指定线程池的最大工作线程数 @tornado.web.asynchronous @tornado.gen.coroutine def post(self): # 获取上传的文件 file = self.request.files['file'][0] filename = file['filename'] # 将文件分片保存到临时文件夹中 temp_path = os.path.join('temp', filename) with open(temp_path, 'wb') as f: f.write(file['body']) # 处理文件分片的上传逻辑,可以使用多线程或协程进行处理 self.finish("Upload complete") ``` 3. 创建一个Tornado应用,并将自定义的RequestHandler指定为路由处理器: ```python def make_app(): return tornado.web.Application([ (r"/upload", UploadHandler), ]) ``` 4. 在主函数中启动Tornado服务: ```python if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start() ``` 这样,当客户端发送POST请求到`/upload`路径时,Tornado将会使用线程池来处理请求,将文件分片保存到临时文件夹中,并可以在`post`方法中实现自定义的文件分片上传逻辑。 请注意,上述代码只是一个简单的示例,实际应用中可能需要添加更多的错误处理、文件合并等逻辑。另外,为了保证线程安全性,可能需要对临时文件进行加锁操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值