关于 file-upload-handling
面向开发者的文件上传技能,介绍如何在不同后端框架中构建安全的上传系统,涵盖验证、扫描、存储与交付,并提供多种实现参考。
主要功能
- 01文件类型与大小验证
- 02文件名清理
- 03病毒扫描指南
- 04存储与访问控制
- 05CDN 交付与签名 URL
- 06后端及云存储参考
适用场景
- 01为应用添加上传功能
- 02管理用户文档
- 03提供媒体文件服务
- 04构建批量导入流程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill file-upload-handling安装后在 Claude Code 中输入/file-upload-handling确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/fastapi-file-upload.mdnodejs-express-file-upload-with-multer.mdpythonflask-file-upload.mds3cloud-storage-integration.mdscripts/validate-pipeline.shtemplates/pipeline.yaml详细介绍
文件上传处理
目录
概述
借助验证、净化、病毒扫描、高效的存储管理、CDN 集成和适当的文件提供机制,在不同的后端框架中构建安全、可靠的文件上传系统。
适用场景
- 实现文件上传功能
- 管理用户上传的文档
- 存储和提供媒体文件
- 实现个人资料图片上传
- 构建文档管理系统
- 处理批量文件导入
快速开始
最小可运行示例:
# 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
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)
参考指南
references/ 目录中的详细实现:
| 指南 | 内容 |
|---|---|
| Python/Flask 文件上传 | Python/Flask 文件上传 |
| Node.js Express 使用 Multer 上传文件 | Node.js Express 使用 Multer 上传文件 |
| FastAPI 文件上传 | FastAPI 文件上传 |
| S3/云存储集成 | S3/云存储集成 |
最佳实践
✅ 应该做
- 验证文件扩展名和 MIME 类型
- 在处理前检查文件大小
- 使用安全的文件名,防止目录遍历
- 将文件存储在 Web 根目录之外
- 实施病毒扫描
- 使用 CDN 分发文件
- 为直接访问生成签名 URL
- 记录文件上传/下载事件
- 实施访问控制检查
- 清理临时文件
❌ 不要做
- 信任用户提供的文件名
- 将文件存储在 Web 可访问的目录中
- 允许任意文件类型
- 跳过对上传文件的病毒扫描
- 暴露绝对文件路径
- 允许无限制的文件大小
- 忽略访问控制
- 使用可预测的文件路径
- 在文件名中存储敏感元数据
- 忘记验证文件内容
评论
支持 Markdown