Django集成Cloudinary实现全类型文件上传删除及上传报错解决
问题解决方案
1. 非图片格式上传报错(INVALID IMAGE FILE)解决
出现该报错的核心原因是CloudinaryField默认仅校验接受图片类型的资源,需要手动指定资源类型为自动识别:
修改models.py中的file字段定义:
file = CloudinaryField( resource_type='auto', # 自动识别视频、音频、文档、压缩包等所有资源类型 )
2. 文件大小超限报错解决
默认Cloudinary对单文件上传的阈值限制较低,同时默认未开启大文件分片上传能力,修改字段定义添加分片配置即可:
file = CloudinaryField( resource_type='auto', upload_options={ "chunk_size": 6 * 1024 * 1024, # 超过6MB的文件自动分片上传,突破单文件大小限制 # 可选配置:限定允许上传的格式,避免恶意文件上传 "allowed_formats": ["jpg", "jpeg", "png", "gif", "mp4", "mov", "mp3", "wav", "pdf", "zip", "rar"] } )
注意:如果使用Cloudinary免费版,本身有资源额度限制:单张图片最大25MB、单份非媒体类文件(PDF/ZIP等)最大20MB、单个视频最大100MB,超出该额度的文件需要升级Cloudinary套餐才能上传。
3. 实例删除时云端文件同步删除报错解决
之前的写法将Django模型delete方法的参数直接传入了Cloudinary文件删除接口,两个接口的参数规则不匹配,修改delete方法如下即可:
def delete(self, *args, **kwargs): # invalidate=True 同时清除Cloudinary CDN中该文件的缓存 self.file.delete(invalidate=True) super().delete(*args, **kwargs)
其他注意事项
前端提交文件的表单必须添加enctype="multipart/form-data"属性,否则文件无法正常上传。
内容的提问来源于stack exchange,提问作者Verma
相关产品推荐
相关产品推荐

