Я не могу отправить файл на сервер django через angular и ошибка говорит: Отправленные данные не являются файлом. Проверьте тип кодировки в форме

мой код выглядит следующим образом, я отправляю данные через httpClient и он возвращается ошибка при загрузке моя версия angular - 13 а версия django - 4 и я использую django rest framework для restApi ng компонент

  const data={
    "image_url":this.imgFile,
    "caption": this.caption,
    'author':1
  };
  console.log(data);
  this.service.createPost(data).subscribe(res=>console.warn(res));
}
  onFileChanged(event:any) {
    const reader = new FileReader();
    this.file = event.target.files[0];
    if(!this. file) return
    reader.readAsDataURL(this.file);

    reader.onload = () => {
      this.imgFile = reader.result as string;

    };
  }

модель джанго

    caption = models.CharField(max_length=4000)
    likes = models.IntegerField(default=0, blank=True)
    is_liked = models.BooleanField(default=False, blank=True)
    date = models.DateTimeField(auto_now_add=True)
    image_url = models.ImageField(upload_to='images', blank=True)
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    def __unicode__(self):
            return (self.caption)
    def __str__(self):
        return self.caption + ' | ' + str(self.likes)

django view

    def get(self, req):
        data = Post.objects.all()
        serialized = PostSerializer(data, many=True)
        return Response(serialized.data)

    def post(self, request):
        serializer = PostSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

django Serializer

class PostSerializer(serializers.ModelSerializer):
    # image_url = ThumbnailerSerializer(alias='avatar')
    class Meta:
        model = Post
        fields = '__all__'
    def create(self, validated_data):
        return Post.objects.create(**validated_data)

В вашем файле component.ts

onFileChanged(event:any) {
const reader = new FileReader();
this.file = event.target.files[0];
this.form.patchValue({
  image: this.file
})
if(!this. file) return
reader.readAsDataURL(this.file);

reader.onload = () => {
  this.imgFile = reader.result as string;

};


onSubmit(){
  this.service.addRecord(
    this.signUpForm.value.likes,
    ...
    this.signUpForm.value.image,
  )
}

в вашем файле service.ts

addRecord(
email: string,
...
image: File): Observable<any>{
let formData: any = new FormData();
formData.append("email", email)
formData.append("photo", photo)
return this.http.post<any>(this.APIUrl + "/post/",formData)

}

Вернуться на верх