美文网首页
Tornado框架的图片上传和保存操作(八)

Tornado框架的图片上传和保存操作(八)

作者: 梦捷者 | 来源:发表于2020-04-15 08:56 被阅读0次

简单图片上传和文件保存的操作(没有用到数据库)

1、self.request.files 的使用和Python 操作文件,写入数据(open的使用)

  • 首先写相应的上传文件的类
class UploadHandler(BaseHandler):

    def get(self):
        self.render('9upload.html')

    def post(self):
        try:
            files = self.request.files['picture']#list类型中包含一个字典
            if files[0]:
                dict_img = files[0]
                filename = dict_img['filename']
                print(filename)
                print(dict_img['content_type'])
                with open('static/upload/{}'.format(filename), 'wb') as f:
                    f.write(dict_img['body'])
                self.render('10upload_success.html', filename=files[0]['filename'])
            else:
                self.write("上传失败,系统不听话")
        except:
            self.write("上传失败,上传的图片不可以为空")
  • 路由配置
 handlers = [
        (r'/upload', UploadHandler)
    ]
  • 9upload.html
{% extends base.html %}
{% block title %}
上传图片界面
{% end %}
{% block  body%}
<form action="/upload" enctype="multipart/form-data" method="post">
   上传文件: <input type="file" name="picture"/><br>
    <input type="submit"/>
</form>
{% end %}
  • 10upload_success.html
{% extends base.html %}
{% block title %}
图片上传成功界面
{% end %}

{% block body%}
你成功上传了图片{{ filename }}!!!!,图片如下:<br>
<img src="{{ static_url('upload/{}'.format(filename)) }}" width="250" height="250">
{% end %}

2、用简单的目录检索来展示图片(使用 Python 标准库 glob)

  • 首先我创建一个模块来生成图像路径列表upload_liat.py文件
from glob import glob
list_imgs = glob('static/upload/*')
new_list_img =[]
for list_img in list_imgs:
    print(list_img)
    new1 = list_img.replace('static/upload/', 'upload/')
    new_list_img.append(new1)
  • 然后在类中使用传到前端去进行渲染
from upload_liat import new_list_img
class UploadHandler(BaseHandler):

    def get(self):
        self.render('9upload.html')

    def post(self):
        try:
            files = self.request.files['picture']#list类型中包含一个字典
            if files[0]:
                dict_img = files[0]
                filename = dict_img['filename']
                print(filename)
                print(dict_img['content_type'])
                with open('static/upload/{}'.format(filename), 'wb') as f:
                    f.write(dict_img['body'])

                self.render('10upload_success.html', filename=files[0]['filename'], list_img=new_list_img)
            else:
                self.write("上传失败,系统不听话")
        except:
            self.write("上传失败,上传的图片不可以为空")
  • 9upload.html和上面相同,10upload_success.html如下所示:
{% extends base.html %}
{% block title %}
图片上传成功界面
{% end %}

{% block body%}
你成功上传了图片{{ filename }}!!!!,图片如下:<br>
<img src="{{ static_url('upload/{}'.format(filename)) }}" width="250" height="250"><br>
{% set line="===="*6 %}
{{ line }}<br>
其他的上传图片还有如下几张:<br>
{% for img in list_img %}
<img src="{{ static_url(img) }}" width="250" height="250">
{% end %}
{% end %}

3、缩略图的生成

  • 首先安装相应的库
pip install pillow
  • pillow库的使用(相关类中进行编写)
from PIL import Image
class UploadHandler(BaseHandler):

    def get(self):
        self.render('9upload.html')

    def post(self):
        try:
            files = self.request.files['picture']#list类型中包含一个字典
            if files[0]:
                dict_img = files[0]
                filename = dict_img['filename']
                print(filename)
                print(dict_img['content_type'])
                save_path = 'static/upload/{}'.format(filename)
                with open(save_path, 'wb') as f:
                    f.write(dict_img['body'])
                im = Image.open(save_path)
                im.thumbnail((200, 200))
                im.save('static/thumbs/thumb_{}'.format(filename))
                self.render('10upload_success.html', filename=files[0]['filename'], list_img=new_list_img, new_list_thumb=new_list_thumb)
            else:
                self.write("上传失败,系统不听话")
        except Exception as e:
            print(e)
            self.write("上传失败,上传的图片不可以为空")
  • 例外的简单实例
from PIL import Image
import glob, os

imgs = glob.glob('*.jpg')
for img in imgs:
    name, ext = os.path.splitext(img)
    im = Image.open(img)
    im.thumbnail((200, 200))
    im.save("{}_{}x{}.jpg".format(name, 200, 200), "JPEG")

相关文章

  • Tornado框架的图片上传和保存操作(八)

    简单图片上传和文件保存的操作(没有用到数据库) 1、self.request.files 的使用和Python 操...

  • Spring MVC 实现图片上传、下载、显示

    通过这篇文章你可以了解到: 使用 SpringMVC 框架,上传图片,并将上传的图片保存到文件系统,并将图片路径持...

  • 图片上传处理

    后台管理系统中一些需要上传图片 以及点击图片切换的操作 还有移动端的上传图片,保存方便后期调用 基于 //Ma...

  • iOS保存图片到相册

    UIKit框架下的保存图片 Photos框架下保存图片

  • 微信小程序-图片加水印并保存

    业务需求:选择图片添加水印,并保存,或上传 技术要点:画布,图片选择、上传、保存 首先需要一个图片容器和一个画布 ...

  • 移动端实现图片压缩上传

    上传图片有很多框架,或者是阿里云直传,关于阿里云直传可以看我之前的博客上传图片到阿里云,这次是通过后台进行操作上传...

  • Tornado实战-图片上传和图片展示

    项目主要部分 发现或最近上传的图片页面 所关注的用户图片流 单个图片详情页面 数据库 Database 用户档案 ...

  • mysql注入

    说明 语言python 代码基于 tornado框架 数据库是用Navicat操作的 引入python操作SQL的...

  • 部署项目Nginx+Tornado+Supervisor

    Tornado Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别...

  • Tornado简介

    Tornado简介: Tornado是什么 Tornado是由python开发的Web框架。 Tornado可以做...

网友评论

      本文标题:Tornado框架的图片上传和保存操作(八)

      本文链接:https://www.haomeiwen.com/subject/afisuctx.html