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 时不允许使用方法
尝试使用 blueimp jquery 上传小部件上传时出现 405(不允许的方法)错误
Laravel File Upload with Ajax Show 405 Method Not Allowed Error on Large File Size 20 MB