我有一个通过模板上传文件的角度视图
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)
但是创建的Dict是空的
request.FILES['file']
(Pdb) *** django.utils.datastructures.MultiValueDictKeyError: "'file'"
看起来在FileUploadParser中内置的解析异常没有被运行,而且我正在通过网络发送正确类型的请求。为什么没有办法告诉为什么这个请求没有被正确解析?我错过了什么?
答案 0 :(得分:1)
首先请确保您了解request.files
和request.FILES
之间的区别。前者用于Django Rest Framework 2.x,后者用于Django Rest Framework 3.由于某些原因FileUploadParser
没有正确解析它,但将解析器切换为MultipartParser
特技。请求中的enctype
是多部分的,因此可能与它有关。