Angular 2アプリケーションでファイルをPOSTするメソッドを実装しました。それは私が見つけた解決策に基づいていますhere。Observableでxhr.send()の後にサーバーの応答を取得
Angular 2はファイルアップロードを単独でサポートしていないため、解決方法はxhr
を利用する必要があります。
コンポーネント方法:
onSubmit(): void {
this.inputModuleService.postFile(this.files).subscribe(() => {
console.log('sent');
});
}
サービス方法:
postFile (files: File[]): Observable<string> {
var url = this.uploadURL;
return Observable.create(observer => {
var formData: FormData = new FormData()
var xhr: XMLHttpRequest = new XMLHttpRequest();
formData.append("upload", files[i], files[i].name);
xhr.onreadystatechange =() => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
observer.next(JSON.parse(xhr.response));
observer.complete();
} else {
observer.error(xhr.response);
}
}
};
xhr.open('POST', url, true);
xhr.send(formData);
});
}
私の問題は、私は戻って応答を取得する方法を理解していないということですがこれは実用的なソリューションは、次のようになりますxhr.send()
の呼び出しの後にonSubmit()
メソッドに渡します。 Angular2とObservableと約束のコンセプトは私にとって初めてのものです。
この監視対象からサーバーの応答を取得するにはどうすればよいですか?
私は一時的な変更を行った後のことでした未定義 'i'、のための私の悪いです。詳細な回答をありがとうございます。観測値は常に「」ですか? –
Juicy
いいえ、オブザーバブルはどのタイプでも出力できます。文字列だけが必要な場合は、 'Observable'を使用できます。数値かブール値を期待するならば、 'Observable ' ... –
BeetleJuice