赞
踩
在本教程中,我们将学习如何使用Python Flask框架将文件上传到服务器,并使用SQLite数据库来跟踪上传的文件。我们将提供后端代码和一个示例项目的Git链接,以便您可以轻松地跟随本教程。
首先,您需要安装Python和Flask框架。您可以按照Flask官方文档上的说明进行安装
pip install flask
我们的项目包含以下文件:
- 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数据库来管理上传的文件。希望本教程对您有所帮助!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。