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使用Nginx和uWSGI来运行Python应用

    下面我来详细讲解“详解python使用Nginx和uWSGI来运行Python应用”的完整攻略。 简介 在 Linux 系统中,Nginx 是一个高性能的 Web 服务器/反向代理服务器,而 uWSGI 是一个支持多种协议的 Web 服务容器,它可以让我们轻松地将 Python 程序集成到 Nginx 中,并为我们提供很多的高级配置。在本篇文章中,我们将介绍…

    Flask 2023年5月16日
    00
  • Ajax与JSON的一些学习总结

    我来为你详细讲解“Ajax与JSON的一些学习总结”的攻略。 什么是Ajax? Ajax是Asynchronous JavaScript and XML的缩写,即异步的JavaScript和XML。它是一种利用JavaScript与后台进行数据交互的技术。 Ajax的原理 Ajax的核心在于XMLHttpRequest对象,通过它可以发送HTTP请求、接收H…

    Flask 2023年5月16日
    00
  • 用 Flask 实现发送电子邮件

    Flask 是一款轻量级的 Web 框架,非常适合快速开发小型 Web 应用。 在这篇文章中,我们将详细介绍如何在 Flask 应用中发送邮件。 安装 Flask-Mail 扩展 首先,我们需要安装 Flask-Mail 扩展来发送邮件。可以使用下面的命令来安装 Flask-Mail: pip install Flask-Mail 接下来,我们需要设置 Fl…

    Flask 2023年3月13日
    00
  • Python连接Azure Storage进行数据交互的实现

    下面我将为你详细讲解“Python连接Azure Storage进行数据交互的实现”的完整攻略。 确定使用的Azure Storage服务 首先需要确定使用的Azure Storage服务,常见的有Blob Storage、Queue Storage和Table Storage。其中,Blob Storage用于存储大文件;Queue Storage用于消息…

    Flask 2023年5月15日
    00
  • Python接口测试环境搭建过程详解

    Python接口测试环境搭建过程详解 本文将介绍如何搭建Python接口测试环境以及基本的调试工具的使用,使你可以快速开始编写接口测试脚本。 步骤一:安装Python Python是开发接口测试必不可少的工具。你可以到Python官方网站下载最新的Python安装包,然后根据安装向导进行安装。安装完成后,你可以通过命令行输入以下代码检查你的Python版本:…

    Flask 2023年5月16日
    00
  • Pyhon Flask框架:第一个Flask程序

    下面是Python Flask框架第一个Flask程序的完整攻略。 第一步:安装Flask 首先,我们需要在本地安装Flask。安装Flask的方式很简单,只需要在命令行中输入以下命令即可: pip install Flask 第二步:创建Flask应用 接下来,我们需要在本地创建一个Flask应用。在你选择的文件夹中创建一个名为“app.py”的文件,并用…

    Flask 2023年5月15日
    00
  • Python Flask-Login实现用户会话管理

    我将为您讲解“Python Flask-Login实现用户会话管理”的完整攻略,包含两条示例说明。 提供背景知识 Flask-Login是一个用于Flask的用户会话管理库,提供了方便的登录、注销等功能。通过Flask-Login,我们可以很容易地实现用户会话管理的功能。 安装Flask和Flask-Login 在开始之前,我们需要安装Flask和Flask…

    Flask 2023年5月15日
    00
  • Flask wtforms实现表单验证使用

    下面是详细的“Flask wtforms实现表单验证使用”的攻略: 一、前置知识 在使用 Flask wtforms 实现表单验证前,需要了解以下知识: Flask:Python Web 应用框架,提供了一个模块化的方式组织 Web 应用程序。 Flask wtforms:基于 Flask 的表单验证扩展,可以方便地进行表单验证。 HTML 表单:Web 表…

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