2015-02-11 159 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是多部分的,所以可能與它有關。