Flask实现图片的上传、下载及展示

用Flask处理图片非常容易,这一篇学习一下图片的上传、下载及展示。还是以实例代码演示为主。

首先,实现一个简单的上传(过程中未做任何处理,只是为了演示)
 

点击选择图片,输入李四:

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
    <body>
        <div>
            <form method="post" action="http://localhost:5000/up_photo" enctype="multipart/form-data">
            <input type="file" size="30" name="photo"/>
            <br>
            <input type="text" class="txt_input" name="name" style="margin-top:15px;"/>
            <input type="submit" value="提交信息" class="button-new" style="margin-top:15px;"/>
            </form>
        </div>
    </body>
</html>

 

点击提交信息后,通过 http://localhost:5000/up_photo,传递到后台对应的路由处理,查看控制台:

 

后台接收的路由代码:

basedir = os.path.abspath(os.path.dirname(__file__))

@app.route('/up_photo', methods=['post'])
def up_photo():
    img = request.files.get('txt_photo')
    username = request.form.get("name")
    path = basedir+"/static/photo/"
    file_path = path+img.filename
    img.save(file_path)
    print '上传头像成功,上传的用户是:'+username
    return render_template('index.html')

此时,我们查看static/photo时,已经可以看到我们点击上传的图片了。

以上是最简单的一个文件上传示例,我们实际使用中基本不可能这样去写,通常会做一些处理。例如:上传后做图片名称唯一性的处理、限制上传文件的类型、无论上传成功或者失败,都去做一些返回提示等等。
 

 

限制上传文件类型,例如,我们希望用户上传的文件为图片类型

ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'gif', 'GIF'])

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

上面的代码片段通过截取上传文件的后缀名,判断是否是属于我们期望用户上传的类型。
 

 

更改上传图片名称,防止重名

 

这里我们使用日期加随机数生成图片名,做一个生成字符串的工具类

 

#-*-coding:utf-8-*-
import datetime
import random
class Pic_str:
    def create_uuid(self): #生成唯一的图片的名称字符串,防止图片显示时的重名问题
        nowTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S");  # 生成当前时间
        randomNum = random.randint(0, 100);  # 生成的随机整数n,其中0<=n<=100
        if randomNum <= 10:
            randomNum = str(0) + str(randomNum);
        uniqueNum = str(nowTime) + str(randomNum);
        return uniqueNum;

 

当我们点击图片上传,选择图片点击提交后,页面返回提示信息如下图:

 

此时看我们工程下的upload文件夹,唯一名称的图片已经上传成功

 

图片的下载

@app.route('/download/<string:filename>', methods=['GET'])
def download(filename):
    if request.method == "GET":
        if os.path.isfile(os.path.join('upload', filename)):
            return send_from_directory('upload', filename, as_attachment=True)
        pass

 

图片的展示

# show photo
@app.route('/show/<string:filename>', methods=['GET'])
def show_photo(filename):
    file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
    if request.method == 'GET':
        if filename is None:
            pass
        else:
            image_data = open(os.path.join(file_dir, '%s' % filename), "rb").read()
            response = make_response(image_data)
            response.headers['Content-Type'] = 'image/png'
            return response
    else:
        pass

 

完整示例代码

#encoding:utf-8
#!/usr/bin/env python
from werkzeug.utils import secure_filename
from flask import Flask, render_template, jsonify, request, make_response, send_from_directory, abort
import time
import os
from strUtil import Pic_str
import base64

app = Flask(__name__)
UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'gif', 'GIF'])

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS


@app.route('/upload')
def upload_test():
    return render_template('up.html')


# 上传文件
@app.route('/up_photo', methods=['POST'], strict_slashes=False)
def api_upload():
    file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    f = request.files['photo']
    if f and allowed_file(f.filename):
        fname = secure_filename(f.filename)
        print fname
        ext = fname.rsplit('.', 1)[1]
        new_filename = Pic_str().create_uuid() + '.' + ext
        f.save(os.path.join(file_dir, new_filename))

        return jsonify({"success": 0, "msg": "上传成功"})
    else:
        return jsonify({"error": 1001, "msg": "上传失败"})

@app.route('/download/<string:filename>', methods=['GET'])
def download(filename):
    if request.method == "GET":
        if os.path.isfile(os.path.join('upload', filename)):
            return send_from_directory('upload', filename, as_attachment=True)
        pass
    
    
# show photo
@app.route('/show/<string:filename>', methods=['GET'])
def show_photo(filename):
    file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
    if request.method == 'GET':
        if filename is None:
            pass
        else:
            image_data = open(os.path.join(file_dir, '%s' % filename), "rb").read()
            response = make_response(image_data)
            response.headers['Content-Type'] = 'image/png'
            return response
    else:
        pass


if __name__ == '__main__':
    app.run(debug=True)

基本示例就以上这些了!

 

  • 43
    点赞
  • 191
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 如何下载和安装Adobe Flash CS6? 要下载和安装Adobe Flash CS6,您需要遵循以下步骤: 1. 首先,您需要前往Adobe的官方网站。 2. 在该网站上搜索Flash CS6,然后找到正确的下载链接。 3. 点击下载链接并等待下载完成。 4. 一旦下载完成,您需要运行该文件并按照屏幕上的提示进行安装过程。 5. 如果您已经拥有一个Adobe账户,则可以选择登录。如果没有,请创建一个新的Adobe账户。 6. 稍后,您将被要求输入您的Flash CS6系列号。按照提示输入并继续安装过程。 7. 最后,等待安装完成并重新启动您的计算机即可。 请确保您在下载和安装过程中按照指示进行操作,这样您将能够成功完成该过程。 ### 回答2: Adobe Flash CS6 是一款很受欢迎的矢量图形和动画制作软件,它可以用来创建复杂的交互式网站、游戏、动画等。本文将详细介绍 Adobe Flash CS6 的下载及安装方法。 下载 Adobe Flash CS6 Adobe Flash CS6 下载可以从 Adobe 官方网站上获取,但是因为 Adobe 已经停止对 Flash 系列的维护,所以需要使用 Adobe 设备集成器。 步骤如下: 1. 首先,打开 Adobe 网站,登陆你的 Adobe ID,打开 Creative Cloud 应用程序; 2. 找到 Flash CS6 ,并点击下载; 3. 等待下载完成,打开安装包; 4. 运行安装,同意条款后,选择安装位置,点击安装。 安装 Adobe Flash CS6 安装 Adobe Flash CS6 很简单,只需要按照以下步骤执行即可完成: 1. 打开下载的安装程序,选择安装路径; 2. 选择必要的语言; 3. 点击“安装”按钮; 4. 等待程序安装完成,阅读许可协议并同意; 5. 填写安装信息,激活软件; 6. 打开程序,开始制作作品吧! 总结来说, Adobe Flash CS6 是一款非常实用的动画制作软件,用来制作动画、游戏和交互式网站是非常理想的选择。同时,用户需要注意合法获得软件,并在安装和使用过程中遵循相关许可协议。 ### 回答3: Adobe Flash CS6是一款非常流行的多媒体动画和应用程序制作软件。它可以用于制作网站和游戏中的动画效果、交互式应用程序和其他多媒体内容。如果您想要下载和安装Adobe Flash CS6,请遵循以下步骤: 步骤1:访问Adobe官网并注册账户 首先,访问Adobe公司官网并注册一个帐户。您可以使用您的电子邮件地址注册,并创建一个电子邮件和密码作为登录凭据。在注册过程中,您可以选择试用版或购买许可证,以获取所有功能。 步骤2:下载Adobe Flash CS6 完成注册之后,您应该能够访问Adobe Flash CS6的下载页面。找到适用于您的电脑操作系统的版本,然后单击下载按钮。下载后请妥善保存。 步骤3:安装Adobe Flash CS6 开始安装过程前,关闭电脑中正在运行的所有程序。接下来,双击您的下载文件以开启安装向导。在安装向导中,您需要同意Adobe授权条款,并选择安装所需的语言,接着您可以选择安装的目录和安装选项。安装过程可能需要几分钟,根据您的电脑配置和文件大小不同而有所不同。 步骤4:激活Adobe Flash CS6 完成安装后,您需要激活您的Adobe Flash CS6许可证。在您首次打开软件时,您将要求输入您的许可证信息,并将提示生成一个序列号。您需要将生成的序列号输入到软件以进行激活。如果您已经购买了许可证,请确保仔细遵循激活过程,否则将无法使用该软件。 总之,下载和安装Adobe Flash CS6是一个相对简单的过程,只需要遵循一些步骤即可完成。如果您遇到任何问题,请参考Adobe支持文档或与其支持部门联系。铸铁动画多媒体团队祝您顺利完成下载和安装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值