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

通过Postman向Django后端POST上传图片失败问题求助

问题根因

  • 使用JSONParser解析文件上传请求:文件上传需要用multipart/form-data格式提交,JSON格式无法传输二进制文件数据,导致后端无法读取到上传的图片。
  • 序列化器未接收文件数据:DRF的序列化器处理文件字段时,需要单独传入files参数,仅传入普通表单数据无法完成图片字段的校验。
  • 序列化器参数位置错误:required=False是字段级参数,实例化序列化器时传入该参数不会生效,无实际作用。

修正方案

1. 视图代码修改

@csrf_exempt
def image_list(request):
    if request.method=='GET':
        images=Upload.objects.all()
        serializers=ImageSerializer(images,many=True)
        return JsonResponse(serializers.data,safe=False)
    elif request.method=='POST':
        # 移除JSONParser,直接传入原生表单数据和文件数据
        serializer=ImageSerializer(data=request.POST, files=request.FILES)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data,status=201)
        # 调试阶段可打印错误信息,快速定位校验失败原因
        print(serializer.errors)
        return JsonResponse(serializer.errors,status=400)

如果你想要使用DRF的自动请求解析能力,可以给视图加上@api_view(['GET', 'POST'])装饰器,即可直接使用request.data接收所有类型的请求数据:

from rest_framework.decorators import api_view

@api_view(['GET', 'POST'])
@csrf_exempt
def image_list(request):
    if request.method=='GET':
        images=Upload.objects.all()
        serializers=ImageSerializer(images,many=True)
        return JsonResponse(serializers.data,safe=False)
    elif request.method=='POST':
        serializer=ImageSerializer(data=request.data, files=request.FILES)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data,status=201)
        return JsonResponse(serializer.errors,status=400)

2. 必要依赖与配置检查

  • 确保安装了图片处理依赖Pillow,未安装可执行命令:pip install pillow
  • 在项目settings.py中添加媒体文件存储配置:
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
  • 在根路由文件中添加媒体文件访问路由,方便后续直接访问上传的图片:
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 原有路由配置
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3. 请求提交规范

提交POST上传请求时,需要将请求头的Content-Type设置为multipart/form-data,不要使用JSON格式提交。如果用Postman测试,在body选项卡选择form-data,参数key填写image_file,类型选择File,再选择本地图片提交即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 13:54:03