上载带有Angular到Django Rest框架编码错误的图像

上载带有Angular到Django Rest框架编码错误的图像,angular,django-rest-framework,Angular,Django Rest Framework,我第一次使用DRF,我正试图通过Angular 8上传一张图像 我可以通过邮递员上传图像,没有任何问题,但是当我使用Angular发出post请求时,我收到以下错误消息:JSON解析错误-'utf-8'编解码器无法解码第153位的字节0xff:invalid start byte 我曾尝试将enctype=“multipart/form data”添加到表单标记中,但这似乎没有任何区别 如果这里没有一个简单的解决方案 型号.py class File(models.Model): photo

我第一次使用DRF,我正试图通过Angular 8上传一张图像

我可以通过邮递员上传图像,没有任何问题,但是当我使用Angular发出post请求时,我收到以下错误消息:
JSON解析错误-'utf-8'编解码器无法解码第153位的字节0xff:invalid start byte

我曾尝试将
enctype=“multipart/form data”
添加到表单标记中,但这似乎没有任何区别

如果这里没有一个简单的解决方案

型号.py

class File(models.Model):
  photo = models.ImageField(blank=False, null=False)

  def __str__(self):
    return self.photo.title
class FileUploadParser(APIView):
  parser_class = (FileUploadParser,)

  def post(self, request, *args, **kwargs):
    file_serializer = FileSerializer(data=request.data)

    if file_serializer.is_valid():
      file_serializer.save()
      return Response(file_serializer.data, status=status.HTTP_201_CREATED)
    else:
      return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
照片服务.ts

upload(formData): Observable<any> {
  return this.http.post<any>(
    `${this.apiUrl}/upload/`,
    formData,
    this.httpOptions
  );
}
handleSelectPhoto(event) {
  if (event.target.files.length > 0) {
    const photo = event.target.files[0];
    this.photoForm.get("photo").setValue(photo);
  }
}

handleSubmit(title) {
  const photoFile = this.photoForm.get("photo").value;
  if (!photoFile) {
    return;
  }

  const formData = new FormData();
  formData.append("photo", photoFile);
  this.photoService.upload(formData).subscribe(res => {
    console.log(res);
  });
}
视图.py

class File(models.Model):
  photo = models.ImageField(blank=False, null=False)

  def __str__(self):
    return self.photo.title
class FileUploadParser(APIView):
  parser_class = (FileUploadParser,)

  def post(self, request, *args, **kwargs):
    file_serializer = FileSerializer(data=request.data)

    if file_serializer.is_valid():
      file_serializer.save()
      return Response(file_serializer.data, status=status.HTTP_201_CREATED)
    else:
      return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我假设您使用的是
JSONParser
而不是文件
MultiPartParser
FileUploadParser
,等等

请参见下面的示例

class FileUploadView(CreateAPIView):
    parser_classes = (MultiPartParser,)

参考:

添加您的
视图
@Anjaneyulubata,我已经添加了我的视图。我正在使用FileUploadParser。