2015-02-11 110 views
1

我有一个使用角上传库经由模板request.FILES空使用Django REST框架FileUploadParser和角文件上传

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例外。为什么没有办法说明为什么这个请求没有被正确解析?我错过了什么?

回答

1

首先确保你知道request.files和request.FILES之间的区别。前者用于Django Rest Framework 2.x,后者用于Django Rest Framework 3.至于由于某种原因FileUploadParser没有正确解析它而出现的空字典,但将解析器切换为MultipartParser的确有窍门。请求中的enctype是多部分的,所以可能与它有关。