构建个人文件上传服务: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/') 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数据库来管理上传的文件。希望本教程对您有所帮助!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!


