Tornado文件图片上传例子

Tornado是一个和php有点像但又有不同的服务器脚本了,Tornado优点是它是非阻塞式服务器,而且速度相当快,下面来看个文件上传例子.

文件上传的内容体在tornado.web.RequestHandler.request.files属性中,并且是以数组形式存放的,使用临时文件存储时,在write完成后要记着把seek重置到文件头,要不然文件无法被读取.

再使用Image模块的thumbnail方法进行缩放时,resample=1作为重载渲染参数能够有效的使图片平滑,消除锯齿,代码如下:

  1. if self.request.files:
  2. for f in self.request.files['postfile']:
  3. rawname = f['filename']
  4. dstname = str(int(time.time()))+'.'+rawname.split('.').pop()
  5. thbname = "thumb_"+dstname
  6. # write a file
  7. # src = "./static/upload/src/"+dstname
  8. # file(src,'w+').write(f['body'])
  9. tf = tempfile.NamedTemporaryFile()
  10. tf.write(f['body'])
  11. tf.seek(0)
  12. # create normal file
  13. # img = Image.open(src)
  14. img = Image.open(tf.name)
  15. img.thumbnail((920,920),resample=1)
  16. img.save("./static/upload/postfiles/"+dstname)
  17. # create thumb file//开源软件:phpfensi.com
  18. img.thumbnail((100,100),resample=1)
  19. img.save("./static/upload/postfiles/"+thbname)
  20. tf.close()