项目 02 图片上传和展示


项目 02 图片上传和展示

  main.py

import tornado.web
import os
from utils import photo #导入utils里面的photo.py

class IndexHandler(tornado.web.RequestHandler):
    """
    Home page for user,photo feeds
    """
    def get(self,*arg,**kwargs):
        images_path = os.path.join(self.settings.get('static_path'),'uploads')
        images = photo.get_images(images_path)
        self.render('index.html',images = images)


class ExploreHandler(tornado.web.RequestHandler):
    """
    Explore page,photo of other users
    """
    def get(self,*arg,**kwargs):
        images_urls = photo.get_images('./static/uploads/thumbs')#打开指定路径下的文件
        self.render('explore.html',images=images_urls)#打开explore文件并将图片放上去

class PostHandler(tornado.web.RequestHandler):
    """
    Single photo page and maybe
    """
    def get(self,*arg,**kwargs):
        self.render('post.html',post_id = kwargs['post_id'])

class UploadHandler(tornado.web.RequestHandler):
    """
    接收图片上传
    """
    def get(self,*arg,**kwargs):
        self.render('upload.html')#返回这个页面

    def post(self, *args, **kwargs): #接收文件
        img_files = self.request.files.get('newimg',None)#用RequestHandler的一种属性,接收表单上传的时候会有一个属性可以用get访问,默认为空
        for img_file in img_files:#可能同一个上传的文件会有多个文件,所以要用for循环去迭代它
            with open('./static/uploads/'+img_file['filename'],'wb') as f:#表单提交上来是一个文件,需要用open来打开
                f.write(img_file['body'])#body就是文件的内容即图片

            photo.make_thumb('./static/uploads/'+img_file['filename']) #在创建文件的同时建立减缩图


        self.write({'msg': 'got file:{}'.format(img_files[0]['filename'])})#浏览器显示返回

  templates/uploads.html

{% extends 'base.html' %}

{% block title %} index page {% end %}

{% block content %}
    <form action="/upload" enctype="multipart/form-data" method="post"> #依次是接收文件(即提交接口),form表单要提交的标准操作,方法*/
        <input type="file" name="newimg">
        <input type="submit">
    </form>
{% end %}

  utils 工具类函数包

  utils/photo.py

import glob
import os
from PIL import Image

def get_images(path):#函数意义是将某个路径下所有的文件会返回成一个列表
    images = []
    for file in glob.glob(path+'/*.jpg'):#所有目录下面为*.jpg的所有图片,
        images.append(file)#添加所有file,每个file都是一个全路径
    return images

def make_thumb(path):
    file,ext = os.path.splitext(os.path.basename(path))#分离路径
    im = Image.open(path)#打开路径文件
    im.thumbnail((200,200))#进行减缩
    im.save('./static/uploads/thumbs/{}_{}x{}.jpg'.format(file,200,200),'JPEG')#保存在指定的绝对路径下

优质内容筛选与推荐>>
1、POJ 2299 Ultra-QuickSort (树状数组 或 归并排序)
2、C#程序员开发WinForm必须知道的 Window 消息大全(转)
3、Spring注解
4、Javascript 代理模式模拟一个文件同步功能
5、Android的LayoutInflater


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn