Я не могу отправить файл на сервер 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)
}