示例说明
在 Django 中处理文件上传,带大小限制、类型校验和病毒扫描调度。本示例属于文件上传场景,提供可直接复制使用的python代码片段,附带边界条件与使用注意事项。
技术要点
- size 检查防大文件 DoS
- content_type 白名单防伪装
- 扩展名双重校验纵深防御
代码解读
上述代码实现了带大小限制的 Django 文件上传的核心逻辑。在 Django 中处理文件上传,带大小限制、类型校验和病毒扫描调度。代码中包含输入校验、核心算法和结果返回三个部分。关键在于正确处理边界情况,例如空输入、非法参数和并发场景。size 检查防大文件 DoS,content_type 白名单防伪装。这些设计确保代码在生产环境中的健壮性。
使用建议
在实际项目中使用本示例时,建议先理解带大小限制的 Django 文件上传的适用场景与限制条件。扩展名双重校验纵深防御。根据具体业务需求调整参数配置,并编写单元测试覆盖正常路径与边界情况。本代码片段可直接集成到现有项目中,或作为参考实现自行扩展。
代码示例
from django.core.exceptions import ValidationError
from django.conf import settings
import os
MAX_UPLOAD_SIZE = 10 * 1024 * 1024
ALLOWED_TYPES = {'image/png', 'image/jpeg', 'application/pdf'}
def validate_upload(file):
if file.size > MAX_UPLOAD_SIZE:
raise ValidationError(f'File too large: {file.size} > {MAX_UPLOAD_SIZE}')
if file.content_type not in ALLOWED_TYPES:
raise ValidationError(f'Unsupported type: {file.content_type}')
ext = os.path.splitext(file.name)[1].lower()
if ext not in {'.png', '.jpg', '.pdf'}:
raise ValidationError(f'Invalid extension: {ext}')