一、环境准备与依赖安装
在开始构建数字档案协同办公系统之前,必须先准备好基础运行环境。本系统采用 Python 作为后端语言,因其生态丰富且部署简单;前端使用原生 HTML5 配合 JavaScript,无需复杂的构建工具,确保零门槛上手。
1. 安装 Python 环境
请确保你的系统已安装 Python 3.8 或更高版本。打开终端或命令提示符,输入以下命令检查版本:
```bash
python --version
```
如果未安装,请前往 Python 官网下载对应系统的安装包并安装。安装时务必勾选 "Add Python to PATH"。
2. 创建项目目录与虚拟环境
为了保持项目隔离,建议创建独立的文件夹并激活虚拟环境。执行以下命令:
```bash
mkdir digital_archive_system
cd digital_archive_system
python -m venv venv
```
激活虚拟环境:
- Windows:
venv\Scripts\activate
- macOS/Linux:
source venv/bin/activate
3. 安装核心依赖库
本系统主要依赖 Flask 框架处理 Web 请求。执行以下命令安装:
```bash
pip install flask
```
二、后端核心逻辑开发
后端负责处理文件的存储、元数据管理(如上传者、时间、分类)以及下载请求。我们将使用 SQLite 作为数据库,因为它无需额外安装数据库服务,适合轻量级协同办公系统。
1. 初始化数据库与配置
在项目根目录下创建名为 app.py 的文件。该文件包含完整的后端逻辑。我们需要导入必要的库并设置配置参数:
```python
import os
import sqlite3
import time
from flask import Flask, request, jsonify, send_from_directory, render_template
from werkzeug.utils import secure_filename
app = Flask(__name__)
配置上传文件夹
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
允许上传的文件扩展名
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'doc', 'docx', 'xls', 'xlsx'}
DB_NAME = 'archive.db'
```
2. 数据库连接与初始化函数

在 app.py 中继续添加数据库初始化代码。该逻辑会自动创建一个名为 files 的表,用于存储档案的元数据,实现协同办公中的信息追踪。
```python
def get_db_connection():
conn = sqlite3.connect(DB_NAME)
conn.row_factory = sqlite3.Row
return conn
def init_db():
conn = get_db_connection()
c = conn.cursor()
创建文件表,包含ID、文件名、上传者、分类、上传时间
c.execute('''CREATE TABLE IF NOT EXISTS files
(id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT NOT NULL,
uploader TEXT NOT NULL,
category TEXT,
upload_time TEXT)''')
conn.commit()
conn.close()
启动时初始化数据库
init_db()
```
3. 辅助函数与路由实现
添加文件格式检查辅助函数,以及核心的上传、列表、下载接口。请将以下代码完整追加到 app.py 中:
```python
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
首页路由
@app.route('/')
def index():
return render_template('index.html')
上传接口
@app.route('/api/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'error': '无文件部分'}), 400
file = request.files['file']
uploader = request.form.get('uploader', 'Anonymous')
category = request.form.get('category', 'General')
if file.filename == '':
return jsonify({'error': '未选择文件'}), 400
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
处理重名,添加时间戳
timestamp = str(int(time.time()))
saved_filename = f"{timestamp}_{filename}"
file.save(os.path.join(app.config['UPLOAD_FOLDER'], saved_filename))
存入数据库
conn = get_db_connection()
conn.execute('INSERT INTO files (filename, uploader, category, upload_time) VALUES (?, ?, ?, ?)',
(saved_filename, uploader, category, time.strftime('%Y-%m-%d %H:%M:%S')))
conn.commit()
conn.close()
return jsonify({'message': '上传成功', 'filename': saved_filename}), 201
else:
return jsonify({'error': '文件类型不允许'}), 400
获取文件列表接口
@app.route('/api/files', methods=['GET'])
def list_files():
conn = get_db_connection()
files = conn.execute('SELECT FROM files ORDER BY upload_time DESC').fetchall()
conn.close()
file_list = []
for row in files:
file_list.append({
'id': row['id'],
'filename': row['filename'],
'uploader': row['uploader'],
'category': row['category'],
'upload_time': row['upload_time']
})
return jsonify(file_list)
下载接口
@app.route('/uploads/
')
def download_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
app.run(debug=True, port=5000)
```
三、前端交互界面构建
为了实现协同办公的前端交互,我们需要创建一个包含上传表单和文件列表的页面。在项目根目录下创建一个名为 templates 的文件夹,并在其中新建 index.html 文件。
1. 页面结构与样式
该页面包含一个简洁的上传区域和动态加载的档案列表。使用 CSS 进行简单的布局美化,确保操作直观。
```html
数字档案协同办公系统
```
四、系统运行与功能验证
代码编写完成后,最后一步是启动服务并进行实际操作测试,确保协同办公流程畅通。
1. 启动服务
确保虚拟环境处于激活状态,在终端执行以下命令启动 Flask 应用:
```bash
python app.py
```
终端显示 Running on http://127.0.0.1:5000 即表示启动成功。
2. 执行协同办公操作
打开浏览器,访问 http://127.0.0.1:5000。按照以下步骤验证功能:
- 上传档案: 点击“选择文件”按钮,选取本地的一个文档(如 PDF 或 Word)。在“上传者姓名”栏输入“张三”,选择分类为“合同文件”,点击绿色“上传档案”按钮。页面应提示“上传成功”,并在下方列表中立即显示该条目。
- 多用户模拟: 刷新页面,再次上传一个文件,但在“上传者姓名”栏输入“李四”,选择“财务报表”。观察列表中是否正确区分了不同的上传者和分类,这验证了协同办公的基础属性记录功能。
- 下载协同: 在列表右侧点击“下载”链接。浏览器应开始下载对应文件,且文件名应为原始文件名(后端处理了时间戳前缀的剥离显示,但下载的是真实文件)。
- 数据持久化验证: 关闭终端(停止服务),然后重新执行
python app.py。再次刷新浏览器页面,之前上传的文件列表依然存在,证明 SQLite 数据库已正确保存数据。
3. 目录结构确认
操作完成后,检查项目根目录,应自动生成以下结构:
uploads/:存放所有上传的物理文件。
archive.db:SQLite 数据库文件,存储元数据。
app.py:后端核心程序。
templates/index.html:前端页面。