angular - Hur skickar man data till servern i Angular2?
onChange(event) {
var image = event.srcElement.files;
console.log(image);
Mitt konsolvärde är
FileList {0: File, length: 1}
Vad ska jag skicka till servern som mina postdata?
Svar #1
Jag antar att event.srcElement faktiskt är <input type="file"> eftersom du får åtkomst till dess files-egenskap som endast är tillgänglig för filinmatningsfält.
Angular2 Http-tjänst fungerar endast med strängkroppar för tillfället. Det finns ett öppet ärende för att även stödja FormData, vilket skulle förenkla saker avsevärt.
Se feat(http): Stöd många typer av kropp på Request/Response och alla ConnectionBackend-implementationer.
Just nu kan du använda ett rått XMLHttpRequest-objekt inlindat med NgZone för att skicka POST-data som FormData.
Men kanske ännu lättare lösning för dig skulle vara att skicka filen som en base64-kodad sträng:
onChange(event) {
var image = event.srcElement.files[0];
var reader = new FileReader();
reader.onload = (evt) => {
// Print base64 encoded file content
console.log(evt.target.result);
// Send data to server
this.http.post(url, evt.target.result)...
}
reader.readAsDataURL(image);
}
För mer information se:
- Hur skickar man ett FormData-objekt med POST i Angular 2?
- Läsa filinnehåll på klientsidan i JavaScript i olika webbläsare
- http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp
Svar #2
Något som:
return this.http
.post(this.heroesUrl, JSON.stringify({name: name}), {headers: this.headers})
.toPromise()
.then(res => res.json().data)
.catch(this.handleError);
är perfekt, du har allt du behöver på https://angular.io/docs/ts/latest/tutorial/toh-pt6.html
