So habe ich asp.net Core-Anwendung mit eckigen2. Jetzt möchte ich ein Bild hochladen, und ich habe es geschafft, wenn ich es als Byte hochladen []. Aber dann kann ich nicht überprüfen, ob die Datei wirklich Bild im Backend ist, also habe ich versucht, nach anderen Lösungen zu suchen .. Ich fand dieses Blog über Datei-Upload: https://devblog.dymel.pl/2016/09/02/upload-file-image-angular2-aspnetcore/ aber es funktioniert nicht für mich ...Bild mit angular2 auf asp.net Kern hochladen
Für Datei-Upload ich benutze angular2 Bibliothek angular2-Bild-Upload, so dass mein html Teil hochladen von Bildern sieht wie folgt aus:
onFileChange(event: any) {
this.file = event.target.files[0];
if (event.target.files && this.file) {
var reader = new FileReader();
reader.onload = (event: any) => {
this.profilePicture = event.target.result;
}
reader.readAsDataURL(this.file);
}
}
onSaveChanges() {
this.isSaving = true;
this.country = this.state.user.country;
this.userService.userChange(this.firstName, this.lastName, this.country, this.file, this.currentPassword, this.newPassword).subscribe(success => {
this.state.user.profilePicture = this.profilePicture;
this.state.user.firstName = this.firstName;
this.state.user.lastName = this.lastName;
this.isSaving = false;
this.passwordError = false;
this.isSuccessful = true;
this.currentPassword = '';
this.newPassword = '';
this.newPasswordRepeat = '';
}, error => {
this.isSaving = false;
this.passwordError = true;
this.passwordErrorMessage = error._body;
});
}
mein angular2 api Anruf Aussehen:
<image-upload [max]="1" [buttonCaption]="'Browse'" [preview]="false" (change)="onFileChange($event)"></image-upload>
<button (click)="onSaveChanges()" class="btn btn-primary float-left" type="submit">Save</button>
dann mein angular2 Teil sieht wie folgt aus wie t sein:
userChange(firstName: string, lastName: string, country: string, file: File, oldPassword: string, newPassword: string) {
let input = new FormData();
input.append("File", file);
var url = this.baseUrl + "updateUser";
return this.http.post(url, { FirstName: firstName, LastName: lastName, Country: country, File: input, OldPassword: oldPassword, NewPassword: newPassword });
}
meine asp.net Core-Controller (Hinweis, dass ich den Körper der Controller nicht angezeigt, weil sie irrelevant ist):
[HttpPost]
public async Task<IActionResult> UpdateUser([FromBody]UserChange userChange)
{
}
UserChange Klasse:
public class UserChange
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Country { get; set; }
public IFormFile File { get; set; }
public string OldPassword { get; set; }
public string NewPassword { get; set; }
}
Die Sache ist, dass, wenn ich mein Bild einreiche, ich immer mein UserChange-Objekt als null bekomme. Als ich Bild als Byte [] hinzufügte, arbeitete es wie ein Charme, was ist das Problem ?? Warum bekomme ich immer null, auch wenn ich die Datei übergebe, die nicht null ist? Andere Sache, die ich sah, dass, wenn ich die Art von IFormFile ändere mein UserChange Objekt Formfile nicht mehr null ist, sondern nur Dateiparameter von Objekt wirft diesem Fehler
‚userChange.File.ContentDisposition‘ hat eine Ausnahme vom Typ ‚System.NullReferenceException‘
UPDATE 1
Irgendwie schaffte ich Datei zu asp.net-Controller mit dieser Antwort zu senden: File upload using Asp.Net Core Web API file is always null aber zu tun, so hatte ich eine andere Aktion zu erstellen, die keine Parameter hat, bu t wie Datei in meiner Situation zu senden ist immer noch unbekannt ...