Python Flask实现图片上传与下载的示例详解

下面我来详细讲解一下“Python Flask实现图片上传与下载的示例详解”的完整攻略。

一、示例一:实现图片上传

1. 安装Flask

首先需要安装Flask,可以使用pip install flask命令进行安装。

pip install flask

2. 创建Flask应用

创建一个Python文件,比如叫做app.py,然后在里面写入以下代码:

from flask import Flask, request, redirect, url_for
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'static/uploads'  # 上传文件保存位置

@app.route('/')
def home():
    return """
        <html>
            <body>
                <h1>图片上传示例</h1>
                <form method="POST" action="/upload" enctype="multipart/form-data">
                    <input type="file" name="file">
                    <input type="submit" value="上传">
                </form>
            </body>
        </html>
    """

@app.route('/upload', methods=['POST'])
def upload():
    if 'file' not in request.files:
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        return redirect(request.url)
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    return redirect(url_for('home'))

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

这段代码定义了一个名为app的Flask应用,并设置了一个名为UPLOAD_FOLDER的变量,该变量表示上传文件保存的位置。然后,我们定义了两个路由,一个路由为'/',用于显示上传图片的表单,另一个路由为'/upload',用于处理上传图片的请求。

3. 运行Flask应用

可以使用以下命令启动Flask应用:

python app.py

然后,在浏览器中访问http://localhost:5000即可看到一个用于上传图片的表单。选择一张图片,然后点击上传按钮,该图片将会被上传到static/uploads目录下。

二、示例二:实现图片下载

1. 创建一个用于下载图片的路由

在app.py中添加一个新的路由/show/,用来获取图片文件名,并返回该文件的绝对路径。代码如下:

@app.route('/show/<filename>')
def show(filename):
    return redirect(url_for('static', filename=f'uploads/{filename}'), code=301)

2. 修改home页面代码

在home页面中添加一个链接用来下载上传的图片,代码如下:

from flask import Flask, request, redirect, url_for
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'static/uploads'  # 上传文件保存位置

@app.route('/')
def home():
    # 获取上传图片列表
    upload_files = os.listdir(app.config['UPLOAD_FOLDER'])
    # 构造页面HTML代码
    html = """
        <html>
            <body>
                <h1>图片上传示例</h1>
                <form method="POST" action="/upload" enctype="multipart/form-data">
                    <input type="file" name="file">
                    <input type="submit" value="上传">
                </form>
                <br>
                <h1>已上传的图片</h1>
                <ul>
    """
    for file in upload_files:
        html += f'<li><a href="/show/{file}" target="_blank">{file}</a></li>'
    html += """
                </ul>
            </body>
        </html>
    """
    return html

@app.route('/upload', methods=['POST'])
def upload():
    if 'file' not in request.files:
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        return redirect(request.url)
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    return redirect(url_for('home'))

@app.route('/show/<filename>')
def show(filename):
    return redirect(url_for('static', filename=f'uploads/{filename}'), code=301)

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

3. 运行Flask应用

和示例一一样,使用以下命令启动Flask应用:

python app.py

然后,在浏览器中访问http://localhost:5000即可看到一个上传图片的表单,上传一张图片之后,会在该页面下方显示已上传的图片列表,点击该列表中的图片名称,即可下载该图片。

至此,我们就实现了图片上传和下载的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Flask实现图片上传与下载的示例详解 - Python技术站

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

相关文章

  • Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍

    下面给您详细讲解“Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍”的完整攻略。 一对多关系 一对多关系适用于一个模型拥有多个其他模型的实例,但是其他模型的实例只属于一个模型实例。比如一个用户可以拥有多篇文章,但是一篇文章只属于一个用户。 在 Flask sqlalchemy 中可以使用 relationship 属性来建立一对多关系,…

    Flask 2023年5月15日
    00
  • python 解决flask uwsgi 获取不到全局变量的问题

    一、问题描述 在Flask应用中,有时我们需要定义一些全局变量,比如数据库连接、缓存对象等等。而当使用uWSGI运行Flask应用时,有时会出现获取不到全局变量的情况。 这是因为uWSGI采用了多进程的方式运行应用,不同进程间的内存空间是独立的,因此在一个进程中定义的全局变量在另一个进程中是无法访问的。这种情况下,我们需要采用一些特殊的方式来解决该问题。 二…

    Flask 2023年5月16日
    00
  • python全栈要学什么 python全栈学习路线

    Python全栈是指掌握从前端到后端开发中所有技术的开发者,下面是Python全栈学习路线的完整攻略及示例说明。 前端开发 基础HTML、CSS和JavaScript概念 HTML:超文本标记语言(HyperText Markup Language)是一种用来描述网页的语言。 CSS:层叠样式表(Cascading Style Sheets)用于控制网页的布…

    Flask 2023年5月15日
    00
  • Flask登录注册项目的简单实现

    我们针对 “Flask登录注册项目的简单实现” 进行一步一步的讲解: 需求分析 在进行一个项目的开发前,首先要进行需求分析,明确该项目的具体功能。 在本次项目中,我们主要需要实现以下功能: 用户注册 用户登录 用户登出 用户信息修改 搭建项目环境 在本次项目中,我们主要使用 Flask 框架进行开发,因此,我们需要先进行 Flask 的安装。使用以下命令安装…

    Flask 2023年5月16日
    00
  • python 获取sqlite3数据库的表名和表字段名的实例

    接下来我将详细讲解“python 获取sqlite3数据库的表名和表字段名的实例”的完整攻略,过程中也会包含两条示例说明。 1. 获取sqlite3数据库的表名 我们可以通过sqlite_master系统表来获取sqlite3数据库中的表名。 示例代码: import sqlite3 def get_table_names(db_file_path): co…

    Flask 2023年5月16日
    00
  • Flask交互基础(GET、 POST 、PUT、 DELETE)的使用

    Flask是一种轻量级Web框架,它具备良好的扩展性和易用性,可用于构建RESTful API。在RESTful API中,我们常用的HTTP协议方法有GET、POST、PUT、DELETE等。下面是Flask中如何使用这些方法的完整攻略。 1. GET方法 在Flask中,GET方法非常容易实现。我们只需定义一个路由,然后使用route()装饰器将其绑定到…

    Flask 2023年5月15日
    00
  • 关于使用Python的time库制作进度条程序

    制作进度条程序是常见的需求,Python的time库提供了一种比较简单的方法来实现这个功能。 首先,我们需要导入time库。 import time 然后,在程序中设置进度条的总长度和每次更新进度条的长度。 total_length = 100 step_length = 1 接着,我们可以使用for循环来模拟进度条的进度。 for i in range(t…

    Flask 2023年5月16日
    00
  • python web框架Flask实现图形验证码及验证码的动态刷新实例

    针对这个话题,我将详细解释如何使用 Flask 实现图形验证码及验证码的动态刷新。 需求分析: 我们的目标是实现两个示例: Example 1:静态图形验证码 Example 2:动态图形验证码 环境部署: 首先,我们需要安装 Flask 和 Pillow 两个库。Flask 用于构建我们的 Web 应用程序,而 Pillow 用于操作图像。 pip ins…

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