405 上传文件时方法不允许

Posted

技术标签:

【中文标题】405 上传文件时方法不允许【英文标题】:405 Method not allowed when uploading file 【发布时间】:2016-09-03 17:08:46 【问题描述】:

我有一个基于类的视图,其中定义了post 方法,这是文件上传的终点。

请求是使用ng-file-upload 模块发出的。

执行上传请求时,收到405 Method not allowed 错误。

如果我尝试使用相同的参数(文件除外)对同一个 URL 进行 POST,它工作正常。

我可以在 Firebug 中看到响应标头不同:

通过 POST 发送请求时,响应的允许方法是 POST 和 OPTIONS 通过上传发送时,它们是 GET、HEAD 和 OPTIONS

这可能是什么原因造成的?

[编辑] 根据要求,这里是视图处理方法的(简化)代码:

def order_data(order, request):
    """
    Return a serialized order with added permission information
    """
    data = OrderSerializer(order).data

    # Add a few custom fields on the data dict

    return data

class SaveOrder(APIView):

    def post(self, request):
        data = request.data.get('order')

        if data.get('id', None) is not None:
            if not request.user.has_perm('orders.modify_order'):
                return HttpResponseForbidden()
            else:
                order = Order.objects.get(id=data['id'])
        else:
            if not request.user.has_perm('orders.create_order'):
                return HttpResponseForbidden()
            else:
                order = Order()

        # Fill in order using the fields in data

         order.save()

        return JsonResponse(order_data(order, request))

[edit2] 实际上,这种行为与我之前描述的不完全一样:

使用 upload 到 url /order/save-order 我收到一条错误消息,提示我需要一个斜杠 upload 到 url /order/save-order/ 我得到一个 405 使用 post 到 url /order/save-order 它工作正常(原始代码) post 到 url /order/save-order/ 我得到一个 404

【问题讨论】:

你能发布处理这个请求的视图函数/类的代码吗? 【参考方案1】:

原来我的请求实际上是针对 2 个不同的 url 完成的,因此上传失败。

【讨论】:

以上是关于405 上传文件时方法不允许的主要内容,如果未能解决你的问题,请参考以下文章

错误:(405) 将文件上传到 https 时不允许使用方法

选项 405(不允许的方法)

发送文件返回 405(方法不允许)

尝试使用 blueimp jquery 上传小部件上传时出现 405(不允许的方法)错误

尝试在 Rails 中发布文件时出现 405 错误

Laravel File Upload with Ajax Show 405 Method Not Allowed Error on Large File Size 20 MB