typescript - este posibil să trimiți FormData împreună cu un fișier imagine către un API web dintr-o aplicație Angular 6
Este posibil să trimiți datele din formular împreună cu fișierul de imagine către API-ul web dintr-o aplicație Angular 6.
app.component.ts
onSelectFile(event) {
if (event.target.files && event.target.files[0]) {
this.imageToUpload = event.target.files[0];
const reader = new FileReader();
reader.onload = e => this.selectedImage = reader.result.toString();
this.fileName = event.target.files[0].name;
reader.readAsDataURL(this.imageToUpload);
}
}
createNewComitteeMember() {
var mServiceObject = {
ComitteeMemberName: this.comittee_Member_Name.value,
ComitteeMemberNumber: this.comittee_Member_Number.value,
ComitteeMemberType: this.comittee_Type.value,
ComitteeMemberTypeOthers: this.comittee_Type_Others.value,
ComitteeMemberPosition: this.comittee_Member_Position.value,
ComitteeMemberPositionOthers: this.comittee_Member_Position_Others.value,
ComitteeMemberStatus: this.comittee_Member_Status.value
}
this.dmlService.CreateNewComitteeMember(mServiceObject, this.imageToUpload ).subscribe(data => {
console.log(data);
});
}
service.ts
CreateNewComitteeMember(mFormData,mImage){
// here how can I merge the mFormData and mImage and pass it to the web API
}
poate cineva să mă ajute să rezolv asta.
Răspuns #1
Poți să folosești FormData aici
CreateNewComitteeMember(mFormData,mImage){
const HttpUploadOptions = {
headers: new HttpHeaders({ "Content-Type": "multipart/form-data"})
}
const formData = new FormData();
formData.append('data', mFormData);
formData.append('image', mImage);
return this.httpClient.post(url, formData, HttpUploadOptions)
}
Pentru mai multe informații despre FormData
Răspunsul #2
Pentru a îmbina două obiecte într-unul singur, poți pur și simplu să faci ceva de genul:
createNewComitteeMember(mFormData, mImage) {
mFormData['image'] = mImage;
}
Problema principală cu ceea ce prezinți este că HTTP are o limită pentru cantitatea de date pe care le poți trimite prin POST. Pentru a ocoli acest lucru, trebuie să setezi antetul Content-Type la 'multipart/form-data'. Aceasta înseamnă că va fi nevoie ca HTTP să facă mai multe cereri către server pentru a transfera toate datele, așadar combinarea datelor împreună pare să nu fie necesară, dar dacă trebuie
