第一天我们学习了如何简单的使用tornado框架能够在浏览器展示我们的代码成功,我们只是才开始呦。今天,就来看一下如何上传图片?
{% extends 'base.html' %}
{% block title %}上传{% end %}
{% block content %}
{% end %}
class UploadHandler(tornado.web.RequestHandler):
"""
上传图片
"""
def get(self,*args,**kwargs):
self.render('upload.html')
def post(self, *args, **kwargs):
img_files = self.request.files.get('newimg',None)
for img in img_files:
#{"filename":..., "content_type":..., "body":...}
print('got {}'.format(img['filename']))
with open('static/upload/{}'.format(img['filename']),'wb') as f:
f.write(img['body'])
print(f)
self.write('upload done ')
可以看到我们运用了self.request.files这个方法, 通过一个表单上传的话就可以使用这个方法,每个上传的文件都是字典格式
{"filename":..., "content_type":..., "body":...}
,
filename:文件名;content_type内容类型;body:
上传文件的内容,文件内容是字节形式。
写入成功之后,就说明我们的文件被保存在相应的路径下面了!
OK,现在就可以 正常的上传啦~
运行app.py并且在浏览器中输入对应的网址(192.168.26.128:8080/upload)来看看效果:
相对应的文件夹下也会出现上传的图片:
现在文件已经上传了,但是显然无法在页面上展示出来,这次我们先在explore.html文件中做点修改
一张图片的话我们可以这样做:
访问explore页面效果:
我要查看全部的图片呢?即把upload目录下面所有的图片取出来。
我们可以使用Python中的glob模块:它是用来文件路径查找的(详细使用可以点击链接查看。)
在使用之前记得import哦~
在main.py中加入如下代码并对ExploreHandler做稍微的修改:
稍微修改一下explore.html文件
在查找到upload文件夹下面所有的文件(图片)名称信息之后,ExploreHandler中调用get_images方法,获取到所有的文件,再将urls传入到explore.html文件中,通过for循环拿到每一个图片,这样就可以把所有的上传的图片展示出来了
(1)创建thumbs文件夹 /static/upload/thumbs
(2)安装pillow包 :pip install pillow
(3)为了代码看上去整齐一点,我们为服务图片的代码专门建个文件夹utils,再新建一个photo.py
把之前在main.py中的某些代码就可以放到photo.py中了
ExploreHandler稍做修改
photo.py
#-*- coding:utf-8-*-
import glob,os
from PIL import Image
def get_images(path):
os.chdir('static')
fs = glob.glob(path + '/*.jpg')
os.chdir('..')
return fs
def make_thumb(path):
im = Image.open(path)
im.thumbnail((200,200))
name = os.path.basename(path)#根据传入的路径拿到文件名
filename,ext = os.path.splitext(name)#分离文件名,eg:1.jpg---->['1','.jpg']
#以某种格式保存图片 eg:filename_200x200.jpg
im.save('static/upload/thumbs/{}_{}x{}{}'.format(
filename,200,200,ext
),'JPEG')
代码已经注释很详细了呦,对pillow这块有兴趣的可以查看pillow官方文档
接下来在更新我们main.py中的UploadHandler:
OK,这下我们可以上传图片并且在发现页可以成为缩略图啦!!!!
我的天,02:32了,我真的是疯了,啊啊啊啊啊啊啊啊,皮肤变差,身体变差,可是谁让我只有大晚上才能专注呢!!坚持坚持~~~~~~有时间多赚钱,少抱怨少矫情