准备工作
需先完成基础环境配置,所有命令直接在终端/CMD中执行:
- 安装Python3.8及以上版本,Windows用户执行命令:
winget install Python.Python.3.10;Linux用户执行:sudo apt install python3 python3-pip;macOS用户执行:brew install python@3.10
- 安装项目依赖,执行命令:
pip install flask chardet
- 确认Python安装成功,执行命令:
python --version,输出需为3.8及以上版本
系统核心功能搭建
1. 创建项目基础文件
执行命令创建项目目录并进入:
mkdir archive_system
cd archive_system
在项目目录下创建名为app.py的文件,将下方完整代码复制到该文件中:
```python
from flask import Flask, request, jsonify, send_file, render_template_string
import os
import chardet
import json
app = Flask(__name__)
UPLOAD_FOLDER = './uploads'
INDEX_FILE = './archive_index.json'
ALLOWED_EXTENSIONS = {'pdf', 'doc', 'docx', 'xls', 'xlsx', 'txt', 'jpg', 'png'}
MAX_CONTENT_LENGTH = 100 1024 1024 单文件最大100MB
初始化存储目录与索引文件
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
if not os.path.exists(INDEX_FILE):
with open(INDEX_FILE, 'w') as f:
json.dump({}, f)
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/')
def index():
with open(INDEX_FILE, 'r') as f:
archive_index = json.load(f)
极简前端页面,无需额外资源
html = '''
轻量档案管理系统
综合档案管理系统
上传档案
检索档案
'''
return render_template_string(html)
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'code':400,'msg':'未选择文件'}),400
file = request.files['file']
if file.filename == '':
return jsonify({'code':400,'msg':'文件名为空'}),400
if allowed_file(file.filename):
保存文件到存储目录
filename = file.filename
save_path = os.path.join(UPLOAD_FOLDER, filename)
file.save(save_path)
更新索引文件
with open(INDEX_FILE, 'r') as f:
index_data = json.load(f)
index_data[filename] = save_path
with open(INDEX_FILE, 'w') as f:
json.dump(index_data, f)
return jsonify({'code':200,'msg':'上传成功'}),200
return jsonify({'code':400,'msg':'文件类型不支持,仅允许:pdf、doc、docx、xls、xlsx、txt、jpg、png'}),400
@app.route('/search')
def search_archive():
keyword = request.args.get('keyword', '').lower()
with open(INDEX_FILE, 'r') as f:
index_data = json.load(f)
matched = [{'name':name} for name in index_data.keys() if keyword in name.lower()]
return jsonify(matched)
@app.route('/view/
')
def view_archive(filename):
with open(INDEX_FILE, 'r') as f:
index_data = json.load(f)
if filename not in index_data:
return '文件不存在',404
file_path = index_data[filename]
ext = filename.rsplit('.',1)[1].lower()
根据文件类型返回对应展示
if ext in ['jpg','png']:
return f'
'
elif ext == 'txt':
with open(file_path, 'rb') as f:
raw = f.read()
encoding = chardet.detect(raw)['encoding']
content = raw.decode(encoding, errors='ignore')
return f'{content}'
else:
其他类型直接触发下载
return send_file(file_path, as_attachment=True)
@app.route('/download/')
def download_archive(filename):
with open(INDEX_FILE, 'r') as f:
index_data = json.load(f)
if filename not in index_data:
return '文件不存在',404
return send_file(index_data[filename], as_attachment=True)
if __name__ == '__main__':
app.config['MAX_CONTENT_LENGTH'] = MAX_CONTENT_LENGTH
app.run(debug=False)
```
系统启动与日常操作
启动服务:在项目目录执行命令:flask run --host=0.0.0.0 --port=5000,终端输出提示:Running on http://127.0.0.1:5000,即启动成功
档案上传操作
打开浏览器访问http://localhost:5000,进入系统首页:点击上传区域的“选择文件”,勾选符合支持类型的档案,点击“上传”按钮,提示“上传成功”即完成操作,档案自动保存到uploads目录,索引同步更新
档案检索与利用操作
在检索框输入档案名称的关键词,点击“检索”按钮,下方会显示匹配的档案列表:
- 若为txt、jpg、png:直接在线预览
- 其他格式(pdf、word、表格):自动触发下载,下载后可本地查看
日常维护注意事项
定期备份两个关键文件:uploads目录(存储所有实际档案)和archive_index.json(存储档案索引),备份到其他独立存储位置,防止文件丢失;不要存放涉密或敏感文件,该系统仅用于本地轻量档案管理;若需调整支持的文件类型,可修改代码中ALLOWED_EXTENSIONS集合,添加或删除对应文件后缀。