vue3 django 上传多个文件 415问题

#view.py
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import api_view, permission_classes

#以下是django后台上传代码

@api_view(['POST'])                               #屏蔽get请求,只留下post
@permission_classes([IsAuthenticated])            #前后端分离的情况下,用jwt令牌识别用户
def upImg(request):
    #上传效果图
    if request.method == 'POST' and request.FILES.getlist('files'):  #判断是否有文件
        linuser = UserPro.objects.get(user=request.user)             #获取当前上传的用户用于绑定文件
        linid = request.POST['id']                                   #获取post参数(看需求添加)
        linbud = Budget.objects.get(id=linid)

        # 保存文件 
        for file in request.FILES.getlist('files'):                  #循环获取文件判断大小并保存
            #小于10m
            if file.size < 1024*10240:
                linfilname = budimg_path(None,file.name)
                linimg = Budimg(name=file.name,effect=linfilname,bud=linbud,custom=linuser) #创建实例,向实例中保存文件路径,然后保存文件
                with open(os.path.join(MEDIA_ROOT,'media',linfilname), "wb") as f:
                    f.write(file.read())
                linimg.save()

        return JsonResponse({'state':'200'})
    else:
        return JsonResponse({'state':'404'})
#upload.vue
#其他略

const responseone = await axios.post(url, formData)

以上为基本原理,但是当我们上传的时候会提示415错误,

这是由于drf导致的,虽然我们在上面的代码并没有使用drf,但是当我们使用drf之后,drf会接管所有的api访问,默认情况下drf只接受json格式的数据。所以需要做一下修改

#setting.py

REST_FRAMEWORK = {
    #分页
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,

    #过滤
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
    ],

    #认证
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        
    ],

    #权限
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',

    ],

    #这里是重点,默认没有下面的内容,默认只有 JSONRenderer,所以会屏蔽其他非json api,
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',     #默认
    #    'rest_framework.parsers.FormParser',         #以后可能会用到
    #    'rest_framework.parsers.MultiPartParser',    #上传文件必须
    ),
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',         #默认
    #     'rest_framework.parsers.FormParser',         #以后可能会用到
    #     'rest_framework.parsers.MultiPartParser',    #上传文件必须
    ),


}

把上面注释的内容取消注释,让 rest_framework.parsers.MultiPartParser 生效,就不会出现415错误了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值