zoukankan      html  css  js  c++  java
  • 项目 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')#保存在指定的绝对路径下
  • 相关阅读:
    SQL Server中生成指定长度的流水号
    属性与字段的区别
    Tomcat启动时的异常~!!!
    全面认识验证身份的数字证书
    MyEclipse 5.5 开发 Spring + Struts + Hibernate 的详解视频(长1.5小时)
    resin是什么?是Application Server吗?是WebLogic,Websphere他们的竞争对手吗?
    发现一个HTML得秘密
    用 MyEclipse 开发的最简单的 Spring 例子
    什么是WebSphere?WebSphere是干什么用的?中间件是什么意思?
    简单jsp+servlet实例
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9135894.html
Copyright © 2011-2022 走看看