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日

相关文章

  • 详解Django ORM引发的数据库N+1性能问题

    让我们来一步一步地详细讲解 “详解Django ORM引发的数据库N+1性能问题”的完整攻略吧! 什么是数据库N+1性能问题? 数据库N+1性能问题是ORM使用不当时最常见的性能问题之一。在ORM加载关联数据时,如果没有使用合适的预加载方法,就可能会发出大量的查询,导致查询次数呈N+1的增长模式,最终导致性能问题。 如何预防N+1性能问题? 预防N+1性能问…

    Flask 2023年5月16日
    00
  • 详解python logging日志传输

    下面我将为你详细讲解“详解Python logging日志传输”的完整攻略,包含两条示例说明。 概述 Python中的logging模块提供了强大的日志记录功能,可以对不同等级的日志进行分类,方便后期调试和问题排查。然而,在一个分布式系统中,不同的组件可能运行在不同的机器上,这时候将分散的日志收集起来就变得尤为重要。Python logging模块提供了So…

    Flask 2023年5月16日
    00
  • flask上使用websocket的方法示例

    下面是关于“flask上使用websocket的方法示例”的完整攻略。 什么是WebSocket? WebSocket是一种基于TCP协议的新型网络通信协议,相比HTTP协议,它具有以下优点: 长连接:WebSocket是一种长连接,可以实时的双向通讯,我们不需要反复的建立连接和释放连接,节省了很多浏览器和服务器的开销。 实时性:WebSocket具有实时通…

    Flask 2023年5月16日
    00
  • Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程

    一、介绍 Flask-Migrate是Flask框架中的一个扩展,用于数据库迁移。在使用Flask时,为了保证数据结构和表与每个环境中的需求的一致性,需要在更新迭代时改变数据库结构。 二、安装 在开始使用Flask-Migrate之前,需要先安装。 1.使用pip安装 pip install Flask-Migrate 2.在requirements.txt…

    Flask 2023年5月15日
    00
  • python中使用多线程改进flask案例

    下面我来为您讲解详细的“python中使用多线程改进flask案例”的完整攻略,包括两个示例说明。 什么是多线程 在计算机程序中,线程是被操作系统独立调度和分配CPU时间的基本单位。一个进程中可以包含多个线程,每个线程可以并行执行不同的任务。在Python中,可以通过使用threading模块来创建和管理线程。 为什么要使用多线程 多线程在编写Web应用程序…

    Flask 2023年5月15日
    00
  • flask框架视图函数用法示例

    下面我就详细讲解一下“flask框架视图函数用法示例”的完整攻略,包括两个示例说明: 一、什么是视图函数? 在 Flask 中,视图函数实际上就是一个 Python 函数,这个函数接受一个请求并返回一个响应。在 Flask 路由系统中,我们可以通过 URL 规则将某个 URL 映射到对应的视图函数上,当用户访问这个 URL 时,Flask 会调用对应的视图函…

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

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

    Flask 2023年5月16日
    00
  • 浅谈pycharm下找不到sqlalchemy的问题

    下面是“浅谈pycharm下找不到sqlalchemy的问题”的完整攻略: 问题描述: 在PyCharm中,使用import导入sqlalchemy时出现ModuleNotFoundError的错误提示,报告找不到该模块的路径。例如: import sqlalchemy # 报错信息 ModuleNotFoundError: No module named …

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