ウェブサイト検索

javascript - Angular 2 から API にファイルを送信する方法


私のページには以下のコードがあり、WEB APIからファイルをアップロードしようとしています。formDataにファイルのデータを渡してWEB APIに送信することは試しましたが、formDataで送信されたファイルをどのように読み取るかはわかりません。

AngularからWEB APIにファイルを送信するにはどうすればよいですか、そしてAPIでそれらをどのように読み取ることができますか?

Angular2 フロントエンド部分

<input #fileInput type="file"/>
<button (click)="addFile()">Add</button>

Angular2 コンポーネント

@ViewChild("fileInput") fileInput;

addFile(): void {
    let fi = this.fileInput.nativeElement;
    if (fi.files && fi.files[0]) {
        let fileToUpload = fi.files[0];
        this.uploadService
            .upload(fileToUpload)
            .subscribe(res => {
                console.log(res);
            });
    }
}

Angular2 アップロードサービス

upload(fileToUpload: any) {
 
// var input =?? ; How can I send files to WEBAPI controller action.
    return this.http
        .post("/api/uploadFile", input);
}

WEB API

[HttpPost]
    public string uploadFile()
    {
   // How can I handle files which are sent from UI
        return "uploaded";
    }

回答 #1

フロントエンドでは、ファイルを送信します:

this.uploadService
    .upload(theFile)
    .subscribe(
        res => console.log('Uploaded file with content:', res),
        err => console.error('Failed with error:', error)
    );

サービス中に:

upload(fileToUpload) {
    return this.http.post('api/file/endpoint',
        fileToUpload,
        new HttpHeaders().set('Content-Type', 'application/octet-stream')
    )
    .map(res => res.text()); //mapping to text just to see the string response propagated to component subscribe
}

ASP.NET コントローラー

[Route("api/file/endpoint")]
[HttpPost]
public string GetFile()
{
    using (var stream = new StreamReader(Request.Body))
    {
        return stream.ReadToEnd();
    }
}

もちろん、非同期のものを含め、ストリームを処理するために他の方法を使うこともできます。