构建个人文件上传服务:Python Flask实现上传和下载完整指南

介绍

在本教程中,我们将学习如何使用Python Flask框架将文件上传到服务器,并使用SQLite数据库来跟踪上传的文件。我们将提供后端代码和一个示例项目的Git链接,以便您可以轻松地跟随本教程。

准备工作

首先,您需要安装Python和Flask框架。您可以按照Flask官方文档上的说明进行安装

pip install flask

项目结构

我们的项目包含以下文件:

  • app.py:包含Flask应用程序的后端代码
  • file_mapping.db:SQLite数据库文件,用于跟踪上传的文件
  • uploads文件夹:用于存储上传的文件

代码解释

import os
import uuid
import sqlite3
from flask import Flask, request, send_from_directory, render_template

app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024  # 设置最大文件上传大小为 100MB

# 创建保存文件的目录
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

# 初始化数据库
conn = sqlite3.connect('file_mapping.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS files
             (id INTEGER PRIMARY KEY, original_filename TEXT, new_filename TEXT)''')
conn.commit()
conn.close()


@app.route('/')
def index():
    return render_template("Upload.html")


@app.route('/upload', methods=['POST'])
def upload_file():
    if request.method == 'POST':
        if 'folder' not in request.files:
            return 'No folder part'
        folder = request.files.getlist('folder')
        try:
            conn = sqlite3.connect('file_mapping.db')
            # noinspection PyShadowingNames
            c = conn.cursor()
            for file in folder:
                if file.filename == '':
                    return '没有选择文件'
                if file:
                    original_filename = file.filename
                    # 查询数据库,检查文件名是否已经存在
                    c.execute("SELECT id FROM files WHERE original_filename=?", (original_filename,))
                    existing_file = c.fetchone()
                    if existing_file:
                        continue
                    else:
                        # 生成唯一的文件名
                        new_filename = str(uuid.uuid4()) + os.path.splitext(original_filename)[1]
                        file_path = os.path.join(app.config['UPLOAD_FOLDER'], new_filename)
                        file.save(file_path)
                        # 存储原始文件名和新文件名的关联关系到数据库
                        c.execute("INSERT INTO files (original_filename, new_filename) VALUES (?, ?)",
                                  (original_filename, new_filename))
            conn.commit()
            return '文件上传完成'
        except Exception as e:
            return '文件上载过程中出错: {}'.format(str(e))
        finally:
            conn.close()
    else:
        return '请求方法不允许'


@app.route('/list_files', methods=['GET'])
def list_files():
    conn = sqlite3.connect('file_mapping.db')
    c = conn.cursor()
    c.execute("SELECT original_filename, new_filename FROM files")
    files = c.fetchall()
    conn.close()
    return render_template('Review.html', files=files)


@app.route('/download/<filename>')
def download_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5001, debug=True)

上传文件

我们使用upload_file函数来处理文件上传。在这个函数中,我们首先检查请求中是否存在文件,然后逐个处理上传的文件。对于每个文件,我们检查数据库中是否已经存在相同的文件名,如果不存在,则生成一个新的唯一文件名,并将文件保存到服务器的uploads文件夹中。

查看和下载文件

我们可以使用list_files函数来查看已上传的文件列表,并使用download_file函数来下载特定文件。

截图

获取示例项目

您可以从以下Git链接中获取完整的示例项目:file-upload.git

结论

通过本教程,您将学会如何使用Python Flask框架将文件上传到服务器,并使用SQLite数据库来管理上传的文件。希望本教程对您有所帮助!

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Python Flask是一种轻量级的Web框架,它可以帮助开发者快速构建Web应用程序。本书《Python Flask Web开发入门与项目实战》介绍了Flask的基础知识和实践技巧,包括路由、模板、表单、数据库、认证、部署等方面。此外,本书还提供了多个实战项目,如博客、电子商务、社交网络等,帮助读者深入理解Flask的应用场景和开发流程。对于想要学习Python Flask的开发者来说,这是一本非常实用的入门指南。 ### 回答2: Python Flask是一种基于Python语言的轻量级Web框架,它具有易学易用、灵活、可扩展性强、速度快等特点,因此在Web开发领域有着广泛的应用。Python Flask提供了许多简单易用的工具和方法,使得开发者能够轻松地构建Web应用程序。本文旨在介绍Python Flask的基础知识和实践项目,帮助初学者快速上手并实现简单的Web应用程序。 Python Flask Web开发入门: 1. Flask的安装与使用:首先需要安装Python Flask库,可以使用pip安装,安装完成后即可使用Flask构建Web应用。 2. Flask路由和视图函数:Flask路由是URL到视图函数的映射,基于路由可以添加多个视图函数,以实现不同的功能。Flask的视图函数是一个Python函数,它处理来自Web客户端的请求,并返回响应结果。 3. Flask模板和静态文件:Flask支持使用模板引擎来构建Web页面,通常使用Jinja2模板引擎。另外,Flask还支持使用静态文件,如CSS、JavaScript和图片等,以优化Web页面的展示效果。 4. Flask表单:Flask支持使用表单来接收来自Web客户端的数据,包括GET和POST请求。开发者可以使用Flask-WTF库来实现表单验证和数据的处理。 Python Flask Web开发项目实战: 1. 论坛网站:使用Flask实现一个简单的论坛网站,包括用户注册、登录、发帖和评论等功能。前端可以使用Bootstrap框架。 2. 个人博客:使用Flask和SQLAlchemy实现一个个人博客网站,包括文章展示、评论、分类和标签等功能。 3. 电子商务网站:使用FlaskFlask-RESTful实现一个电子商务网站,包括商品展示、购物车、订单和支付等功能。前端可以使用React框架。 总之,Python Flask是一个功能强大而易用的Web框架,对于Web开发初学者来说,学习和掌握它是非常重要的。在实践项目中,不断地提升自己的实战经验,才能更好地掌握Python Flask的使用和应用。 ### 回答3: Python Flask是一种轻量级的Web应用程序框架,其用途是帮助Web开发人员更轻松地构建Web应用程序。如果您想学习Python Flask Web开发,以下是一些重要方面: 首先,需要了解Python Flask的基本概念和架构,以及如何安装、配置和运行Flask应用程序。可以在官方网站或在线学习网站上学习这些内容。 其次,需要学习Python Flask的路由(routing)功能,了解如何为不同的URL路径配置不同的代码处理程序,以及如何从请求对象(request object)中获取并处理相关数据。 进一步,需要了解Python Flask的框架能够支持各种Web表单,需要掌握如何使用Flask的表单功能和模板引擎,以及如何渲染HTML页面以及处理表单数据。 另外,还需要熟悉处理静态文件的方法和技术,例如CSS、JavaScript和图像等。 最后,要通过实际项目来练习和巩固所学知识。可以使用Python Flask构建博客、社交媒体平台或电子商务网站等应用程序。 需要注意的是,要成为一名成功的Python Flask Web开发人员,需要在学习过程中不断提升自己的编码技能以及学习新技术。同时,也需要具备良好的沟通能力和团队协作能力,以配合其他开发者共同完成项目的构建。 总之,学习Python Flask Web开发需要投入充足的时间和精力,逐步掌握语言、框架和技术,并通过实践来提高自己的技能和能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值