Python做html可上传图片并下载

1. 引言

在本文中,我们将学习如何使用Python来实现一个可以上传和下载图片的HTML页面。我们将使用Python的Flask框架来构建web应用,并通过HTML表单来实现图片的上传,再通过Python代码来实现图片的下载。

2. 整体流程

以下是实现这个功能的整体流程,我们将使用表格来展示每个步骤的详细内容。

步骤 描述
1 创建一个Flask应用
2 创建一个HTML表单,用于上传图片
3 编写Flask路由函数,处理图片上传
4 保存上传的图片到指定位置
5 创建一个HTML页面,用于显示上传的图片
6 编写Flask路由函数,处理图片下载
7 实现图片的下载功能

接下来,我们将逐步学习每个步骤的具体内容。

3. 创建一个Flask应用

首先,我们需要安装Flask库。可以使用以下命令进行安装:

pip install flask

接下来,我们通过以下代码创建一个Flask应用:

from flask import Flask

app = Flask(__name__)

这段代码创建了一个Flask应用对象 app

4. 创建一个HTML表单,用于上传图片

下面,我们将创建一个HTML表单,用于上传图片。我们可以使用以下代码编写一个简单的HTML表单:

<!DOCTYPE html>
<html>
<head>
    <title>上传图片</title>
</head>
<body>
    上传图片
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="提交">
    </form>
</body>
</html>

这段代码创建了一个包含一个文件上传框和一个提交按钮的表单。

5. 编写Flask路由函数,处理图片上传

在Flask应用中,我们可以使用路由函数来处理不同的URL请求。我们可以使用以下代码来编写一个路由函数,用于处理图片上传:

from flask import request

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    file.save('uploads/' + file.filename)
    return '上传成功'

这段代码定义了一个路由函数 /upload,它接受 POST 请求,并且从请求中获取上传的文件。然后,我们将文件保存到 uploads 文件夹中。

6. 创建一个HTML页面,用于显示上传的图片

接下来,我们将创建一个HTML页面,用于显示上传的图片。我们可以使用以下代码编写一个简单的HTML页面:

<!DOCTYPE html>
<html>
<head>
    <title>显示图片</title>
</head>
<body>
    上传的图片
    <img src="/uploads/filename.jpg">
</body>
</html>

这段代码创建了一个包含一个图片标签的HTML页面。图片的 src 属性指向我们之前保存的图片文件。

7. 编写Flask路由函数,处理图片下载

现在,我们将编写一个路由函数,用于处理图片的下载请求。我们可以使用以下代码来编写这个路由函数:

from flask import send_file

@app.route('/download')
def download():
    filename = 'uploads/filename.jpg'
    return send_file(filename, as_attachment=True)

这段代码定义了一个路由函数 /download,它用于处理图片的下载请求。我们使用 send_file 函数来发送文件作为附件进行下载。

8. 实现图片的下载功能

最后,我们需要添加一些CSS样式来美化我们的页面。我们可以使用以下代码添加一些基础的样式:

<style>
    body {
        text-align: center;
        font-family: Arial, sans-serif;
    }
    h1 {
        margin-top: 20px;
    }
    img {
        max-width: 500px;
        max-height: 500px;
        margin-top: 20px;
    }
    input[type="file"] {
        margin-top: 20px;
    }
</style>

这段代码定义了一些基本的样式,用于居中显示文本、设置标题的上边距、限制图片的最大宽