用途
File Upload Handling 用于构建安全且健壮的文件上传系统,覆盖文件校验、清理、病毒扫描、高效存储管理、CDN 集成以及跨不同后端框架的正确文件服务机制。
适用场景
- 实现文件上传功能
- 管理用户上传的文档
- 存储与分发媒体文件
- 实现头像上传
- 搭建文档管理系统
- 处理批量文件导入
主要能力
该技能提供以下参考指南(位于 references/ 目录):
- Python/Flask 文件上传
- Node.js Express 配合 Multer 的文件上传
- FastAPI 文件上传
- S3/云存储集成
使用方式
资料提供了一个最小可运行示例,包含配置与文件服务两部分。
配置示例(config.py):
# config.py
import os
class Config:
MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50 MB
UPLOAD_FOLDER = 'uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'docx', 'doc'}
UPLOAD_DIRECTORY = os.path.join(os.path.dirname(__file__), UPLOAD_FOLDER)
文件服务示例(file_service.py):
# file_service.py
import os
import mimetypes
import hashlib
import secrets
from werkzeug.utils import secure_filename
from datetime import datetime
import magic
import aiofiles
class FileUploadService:
def __init__(self, upload_dir, allowed_extensions, max_size=50*1024*1024):
self.upload_dir = upload_dir
self.allowed_extensions = allowed_extensions
self.max_size = max_size
self.mime = magic.Magic(mime=True)
// ... (see reference guides for full implementation)
完整实现请参见参考指南。
最佳实践
应当(DO):
- 校验文件扩展名与 MIME 类型
- 在处理前检查文件大小
- 使用安全文件名以防止目录穿越
- 将文件存储在 Web 根目录之外
- 实施病毒扫描
- 使用 CDN 进行文件分发
- 为直接访问生成签名 URL
- 记录文件上传/下载事件
- 实施访问控制检查
- 清理临时文件
不应(DON'T):
- 信任用户提供的文件名
- 将文件存储在 Web 可访问的目录中
- 允许任意文件类型
- 跳过对上传文件的病毒扫描
- 暴露绝对文件路径
- 允许无限文件大小
- 忽略访问控制
- 使用可预测的文件路径
- 在文件名中存储敏感元数据
- 忘记校验文件内容
限制
资料未提供具体的收费、价格、平台支持范围或性能效果数据,这些信息暂未提供。