django文件对象是什么? Django 抽象出了一套“文件处理体系”核心是Django 所有文件类的基类提供统一的接口用于读取写入迭代存储到 Storage 后端本地/OSS/S3使用FileField/ImageField来构造12classMyModel(models.Model):filemodels.FileField(upload_tofiles/)这个字段对文件内容不做存储只存储文件路径字符串。真正的文件保存由django.core.files.File一套 Storage默认本地文件系统1obj.file.save(result.txt, ContentFile(hello world))此时 Django 会把 ContentFile 写入本地或 OSS 或 S3把保存后的路径写到数据库字段file二、不同场景下该用哪种 Django 文件对象场景 1用户上传文件常见 Web/DRF123defupload(request):frequest.FILES[file]# InMemoryUploadedFile 或 TemporaryUploadedFileprint(f.name, f.size, f.content_type)场景 2动态生成一个文件如 CSV/JSON/图片并保存到 FileField1234fromdjango.core.files.baseimportContentFilecontentname,age\nTom,18\nJerry,20obj.file.save(data.csv, ContentFile(content))场景 3用 Python open 打开的本地文件写入 FileField1234fromdjango.core.filesimportFilewithopen(local.txt,rb) as f:obj.file.save(copy.txt,File(f))三、几种文件存储的对应配置1.本地存储我就想存到服务器磁盘Django 默认就是本地磁盘文件存储用的类是1DEFAULT_FILE_STORAGEdjango.core.files.storage.FileSystemStorage在settings.py里12345importosBASE_DIRos.path.dirname(os.path.dirname(__file__))MEDIA_ROOTos.path.join(BASE_DIR,media)# 真实文件保存路径MEDIA_URL/media/# 浏览器访问前缀模型配置12classMyModel(models.Model):filemodels.FileField(upload_touploads/)最后1obj.file.save(a.txt, ContentFile(hello))实际效果是文件会被保存到MEDIA_ROOT / uploads / a.txt例如/project_root/media/uploads/a.txt数据库里的字段只保存相对路径uploads/a.txt浏览器访问地址是MEDIA_URL uploads/a.txt→/media/uploads/a.txt访问文件只需要在url.py加一个静态路由:123456fromdjango.confimportsettingsfromdjango.conf.urls.staticimportstaticurlpatterns[# ... 你的其他 URL]static(settings.MEDIA_URL, document_rootsettings.MEDIA_ROOT)2.上云存储S3/OSS/COS/BOS 等1用现成库如 django-storages S3 为例需要安装1pip install django-storages boto3settings.py配置123456789101112INSTALLED_APPS[# ...storages,]DEFAULT_FILE_STORAGEstorages.backends.s3boto3.S3Boto3StorageAWS_ACCESS_KEY_ID你的KeyAWS_SECRET_ACCESS_KEY你的SecretAWS_STORAGE_BUCKET_NAME你的bucket名字AWS_S3_ENDPOINT_URLhttps://s3.amazonaws.com# 若用其他云厂商写他们给的S3兼容endpointMEDIA_URLhttps://你的bucket域名/# 访问 URL 前缀模型不需要改动12classMyModel(models.Model):filemodels.FileField(upload_tofiles/)业务代码1obj.file.save(a.txt, ContentFile(hello cloud))Django 会