【问题标题】:request.FILES empty with Django Rest Framework FileUploadParser and Angular File uploadrequest.FILES 为空,使用 Django Rest Framework FileUploadParser 和 Angular 文件上传
【发布时间】:2015-04-12 12:13:39
【问题描述】:

我有一个通过模板上传文件的角度视图

Multiple
<input type="file" name="file" nv-file-select="" uploader="uploader" multiple  /><br/>

Single
<input type="file" name="file" nv-file-select="" uploader="uploader" />

和控制器使用角度上传库 (https://github.com/nervgh/angular-file-upload)

UploadController.$inject = ['$scope', 'FileUploader'];

 /**
 * @namespace UploadController
 */
 function UploadController($scope, FileUploader) {
   $scope.uploader = new FileUploader();
   $scope.uploader.url = 'api/v1/data/import/'
   $scope.uploader.method = 'PUT'

 };

在服务器端,请求使其成为 View 类中的正确方法

class FileUploadView(views.APIView):

   parser_classes = (FileUploadParser,)

   def put(self, request, format=None):

     file_obj = request.FILES['file']
     # ...
     # do some staff with uploaded file
     # ...
     return Response(status=204)

但是创建的字典是空的

request.FILES['file']
(Pdb) *** django.utils.datastructures.MultiValueDictKeyError: "'file'"

看起来 FileUploadParser 中内置了未运行的解析异常,并且我正在通过网络发送正确类型的请求。为什么没有办法告诉为什么这个请求没有被正确解析?我错过了什么?

【问题讨论】:

    标签: javascript django angularjs django-rest-framework


    【解决方案1】:

    首先确保您知道request.filesrequest.FILES 之间的区别。前者适用于 Django Rest Framework 2.x,后者适用于 Django Rest Framework 3。至于空 dict 出于某种原因 FileUploadParser 没有正确解析它,但将解析器切换到 MultipartParser 就可以了。请求中的 enctype 是多部分的,因此可能与它有关。

    【讨论】:

      猜你喜欢
      • 2017-07-17
      • 2017-02-28
      • 2018-02-21
      • 2011-11-09
      • 1970-01-01
      • 2015-10-06
      • 2011-01-01
      • 2018-12-30
      • 2021-06-02
      相关资源
      最近更新 更多