Flask接收上传图片方法实现

下面是Flask接收上传图片的完整攻略。

准备工作

首先,我们需要先安装Flask的插件Flask-Uploads,可以通过pip直接安装,命令如下:

pip install Flask-Uploads

安装完成后,在Flask的应用中引入该插件:

from flask_uploads import UploadSet, configure_uploads, IMAGES

app = Flask(__name__)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img' # 存放上传图片的文件夹
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)

其中,UploadSet用于初始化上传文件集合,configure_uploads用于设置上传文件存放的目录。IMAGES则表示只允许上传图片文件。

方法一:基本文件上传

HTML文件

首先在HTML文件中需要有一个上传图片的表单,示例代码如下:

<form action="{{ url_for('upload') }}" method="POST" enctype="multipart/form-data">
    <input type="file" name="photo">
    <input type="submit" value="上传">
</form>

其中,action的值为Flask框架中负责处理上传操作的URL,命名为upload(),示例代码如下:

from flask import request

@app.route('/upload', methods=['POST'])
def upload():
    if request.method == 'POST' and 'photo' in request.files:
        filename = photos.save(request.files['photo']) # 保存图片并返回文件名
        return 'File successfully uploaded!'
    return 'Failed to upload file!'

upload()中,首先需要判断请求方式是否为POST,以及上传的文件是否存在。接着,使用save()方法保存图片文件,并返回文件名。

最后在响应中返回上传成功或上传失败的信息。

Markdown文件

以下是基于Flask的上传图片方法一的完整示例代码:

from flask import Flask, request
from flask_uploads import UploadSet, configure_uploads, IMAGES

app = Flask(__name__)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)

@app.route('/', methods=['GET'])
def index():
    return '''
    <h1>文件上传示例</h1>
    <form action="{{ url_for('upload') }}" method="POST" enctype="multipart/form-data">
        <input type="file" name="photo">
        <input type="submit" value="上传">
    </form>
    '''

@app.route('/upload', methods=['POST'])
def upload():
    if request.method == 'POST' and 'photo' in request.files:
        filename = photos.save(request.files['photo'])
        return 'File successfully uploaded!'
    return 'Failed to upload file!'

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

方法二:图片压缩上传

模块安装

在压缩上传图片之前,我们需要安装python的另一个模块Pillow,可以通过pip直接安装,命令如下:

pip install Pillow

Python文件

在Python文件中新增一个压缩参数photo_size,用户可以自定义图片压缩的尺寸。示例代码如下:

from PIL import Image # 导入Image模块

@app.route('/compress_upload', methods=['POST'])
def compress_upload():
    if request.method == 'POST' and 'photo' in request.files:
        # 保存压缩图片
        file = request.files['photo']
        filename = photos.save(file)
        img = Image.open(file)
        img.thumbnail(photo_size) # 压缩图片
        img.save(os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename))

        return 'File successfully uploaded!'
    return 'Failed to upload file!'

compress_upload()方法中,读取图片文件后,使用Pillow中的thumbnail()方法进行图片的压缩,压缩后的图片保存至uploads目录中。

最后在响应中返回上传成功或上传失败的信息。

HTML文件

在HTML文件中,修改表单中action为负责处理压缩上传操作的URL,命名为compress_upload(),同时添加一个hidden类型的输入框,用于保存用户指定的压缩尺寸值。示例代码如下:

<form action="{{ url_for('compress_upload') }}" method="POST" enctype="multipart/form-data">
    <input type="file" name="photo">
    <input type="hidden" name="photo_size" value="200x200"> <!-- 自定义压缩尺寸 -->
    <input type="submit" value="上传">
</form>

Markdown文件

以下是基于Flask的压缩上传图片方法二的完整示例代码:

import os
from PIL import Image
from flask import Flask, request
from flask_uploads import UploadSet, configure_uploads, IMAGES

app = Flask(__name__)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)

photo_size = (200, 200) # 压缩图片尺寸

@app.route('/', methods=['GET'])
def index():
    return '''
    <h1>文件上传示例</h1>
    <form action="{{ url_for('compress_upload') }}" method="POST" enctype="multipart/form-data">
        <input type="file" name="photo">
        <input type="hidden" name="photo_size" value="200x200">
        <input type="submit" value="上传">
    </form>
    '''

@app.route('/compress_upload', methods=['POST'])
def compress_upload():
    if request.method == 'POST' and 'photo' in request.files:
        # 保存压缩图片
        file = request.files['photo']
        filename = photos.save(file)
        img = Image.open(file)
        img.thumbnail(photo_size)
        img.save(os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename))

        return 'File successfully uploaded!'
    return 'Failed to upload file!'

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

以上就是Flask接收上传图片方法实现的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask接收上传图片方法实现 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Python编程flask使用页面模版的方法

    一、使用页面模板 Flask使用Jinja2作为默认的模板引擎。Jinja2是一个现代的模板引擎,可以方便地生成HTML、XML或其他格式的文档。使用Jinja2模板引擎可以快速生成静态页面,提高开发效率。 在项目根目录下新建一个templates文件夹,这个文件夹存放我们的模板文件。然后在模板文件夹下新建一个HTML文件作为模板文件。 示例一:一个简单的模…

    Flask 2023年5月15日
    00
  • flask使用session保存登录状态及拦截未登录请求代码

    下面是“flask使用session保存登录状态及拦截未登录请求代码”的完整攻略,包含两条示例说明。 什么是Session Session 是指用户与Web应用间的一次会话,可以用来存储在整个会话过程中需要跨越请求和响应之间一直使用的数据。 在 Flask 中,可以使用 session 对象保存用户会话数据。session 对象是一个相当有用的、用于临时存储…

    Flask 2023年5月16日
    00
  • FastApi如何快速构建一个web项目的实现

    FastAPI 是一个基于 asyncio 和 pydantic 的现代化 Web 框架,提供了快速开发高性能且易于扩展的 API 工具。适合用于构建现代高性能 Web 服务 API、机器学习应用等等场景。下面将详细讲解如何使用FastAPI快速构建一个Web项目的实现。 一. 安装FastAPI FastAPI可以通过pip安装,安装FastAPI的同时也…

    Flask 2023年5月16日
    00
  • Golang两行代码实现发送钉钉机器人消息

    当你想要通过钉钉机器人来发送消息时,可以使用Golang来实现,且只需要两行代码即可完成。下面是实现的完整攻略: 步骤一:创建钉钉机器人 首先需要在钉钉官网上创建一个机器人,并获取其Webhook URL。具体步骤如下: 登录钉钉开放平台:https://open-dev.dingtalk.com/#/login 点击左侧导航栏中的“自定义机器人管理”。 点…

    Flask 2023年5月16日
    00
  • Flask框架搭建虚拟环境的步骤分析

    下面是“Flask框架搭建虚拟环境的步骤分析”的完整攻略。 步骤1:安装虚拟环境工具 虚拟环境工具可以帮助我们在同一台机器上管理多个 Python 项目所需的不同 Python 环境、包依赖、库版本等。这里推荐使用 virtualenv 工具。 安装 virtualenv 的命令如下: pip install virtualenv 安装成功后可以验证一下: …

    Flask 2023年5月15日
    00
  • Flask框架中request、请求钩子、上下文用法分析

    Flask是一个轻量级的Web框架,它使用Python语言,且易于学习和使用。在Flask框架中,request、请求钩子以及上下文是非常重要的概念。本文将详细介绍这些概念的用法分析,并且提供两个示例说明。 request request是Flask框架中处理客户端请求的核心概念之一。通过request对象,你可以获取请求中的数据,例如GET和POST请求中…

    Flask 2023年5月16日
    00
  • Flask框架钩子函数功能与用法分析

    Flask框架钩子函数功能与用法分析 定义 在 Flask 中,钩子函数是指在请求的不同阶段执行的函数,它可以被用于在请求被处理之前或之后添加额外的操作。Flask 框架提供了多个钩子函数,这些函数以装饰器的形式实现,可以很方便地添加到代码中。 功能与用法 钩子函数可以用于多种目的,以下列出了一些常见的用途: 身份验证 from flask import r…

    Flask 2023年5月15日
    00
  • python Flask框架之HTTP请求详解

    下面我将为您详细讲解“Python Flask框架之HTTP请求详解”的完整攻略。 一、HTTP请求 HTTP请求是指客户端向服务器端发出的请求消息,服务器端接收到请求消息后,会进行相应的处理,并返回处理结果给客户端。 1. HTTP请求的组成部分 HTTP请求通常由以下几部分组成: 请求行:包括请求方法、请求URI和HTTP协议版本。 请求头:包括附加的请…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部