You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework如何实现无需手动操作media文件夹的图片上传

Django 接口直接上传图片修改方案

前置配置确认

先确保你的项目基础配置正确:

  1. settings.py 中已配置媒体文件路径
# settings.py 新增/修改如下配置
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'
  1. 根urls.py 中已添加媒体文件访问路由(开发环境用)
# urls.py
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 你的原有路由规则
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

代码修改步骤

1. 修改models.py(可选但推荐)

给ImageField添加upload_to参数,指定上传文件的存储子目录,系统会自动创建目录存储图片,无需手动操作:

class Project(models.Model):
    title = models.CharField(max_length=300)
    body = models.TextField(max_length=5000)
    # 新增upload_to参数,指定存储到media/project_headers目录下
    header_image = models.ImageField(default="default.jpg", upload_to="project_headers/")
    demo = models.URLField(null=True, blank=True)
    code = models.URLField(null=True, blank=True)

修改后执行python manage.py makemigrations和python manage.py migrate同步数据库变更。

2. 视图代码修改

原有直接从请求取值创建对象的逻辑不支持文件校验和自动存储,改为用序列化器处理请求数据:

@api_view(["POST"])
def addProject(request):
    # 直接将请求数据传给序列化器,request.data会自动解析multipart/form-data中的文件
    serializer = ProjectSerializer(data=request.data)
    # 校验参数合法性,校验失败直接返回错误信息
    serializer.is_valid(raise_exception=True)
    # 保存数据,图片会自动存储到指定的upload_to目录下
    serializer.save()
    return Response(serializer.data)

3. 序列化器不需要修改

你当前的序列化器配置已包含所有字段,默认支持ImageField类型的文件处理,无需额外调整。

接口调用要求

发送请求时必须使用multipart/form-data格式提交,不能用application/json格式:

  • 如果你用Postman测试:Body选择form-data类型,header_image字段的类型选择File,值直接上传本地图片即可,其余字段按普通字符串填写。
  • 如果是前端调用:需要用FormData对象封装参数,把图片文件append到header_image字段中。

内容的提问来源于stack exchange,提问作者zain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:39:03