【问题标题】:Django Rest Framework and File UploadDjango Rest 框架和文件上传
【发布时间】:2016-02-16 18:08:43
【问题描述】:

我正在尝试使用 DRF 和 jQuery 构建文件上传。我用谷歌搜索发现this sample。我在后端有一些类似的代码:

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"

【问题讨论】:

    标签: jquery django django-rest-framework


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      默认的 Django 上传处理程序是:

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

      并且app设置文件中默认没有FILE_UPLOAD_HANDLERS参数。

      在我的例子中,我排除了 MemoryFileUploadHandler 并设置了

      FILE_UPLOAD_HANDLERS = ["django.core.files.uploadhandler.TemporaryFileUploadHandler", ]
      

      在应用程序设置文件中,它解决了问题。

      【讨论】:

        猜你喜欢
        • 2015-10-04
        • 2013-12-26
        • 2016-10-25
        • 2021-09-27
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多