Django Rest Framework和文件上传

7

我正在尝试使用DRF和jQuery构建文件上传。我搜索了一下并找到这个示例。我在后端有一些类似的代码:

class Attachment(BaseModel):
      file = models.FileField(upload_to=get_photo_path)


class AttachmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Attachment
        fields = ('id', 'file')

class AttachmentViewSet(viewsets.ModelViewSet):
    parser_classes = (FileUploadParser, )
    serializer_class = serializers.AttachmentSerializer
    queryset = models.Attachment.objects.all()

    def pre_save(self, obj):
        obj.file = self.request.FILES.get('file')

我尝试将Angular示例翻译成jQuery。

  var fd = new FormData()
  fd.append('file', file) // file from file-field
  var reader = new FileReader()
  $.ajax({
      url: 'http://localhost:8001/files/',
      data: fd,
      processData: false,
      contentType: false,
      type: 'POST'
  }).done(...

由于某些原因,我在后端上传文件时遇到错误:

detail: "FileUpload parse error - none of upload handlers can handle the stream"
2个回答

6

实际上,问题是一种解析器类型。我应该使用(FormParser, MultiPartParser)而不是(FileUploadParser)


3

默认的Django上传处理程序包括:

["django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler"]

默认情况下,应用程序设置文件中没有FILE_UPLOAD_HANDLERS参数。
在我的情况下,我已经排除了MemoryFileUploadHandler并进行了设置。
FILE_UPLOAD_HANDLERS = ["django.core.files.uploadhandler.TemporaryFileUploadHandler", ]

在应用程序设置文件中进行了修改,问题得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接