ASP.NET Core 2.0 and Angular 4.3 File Upload with progress
Asked Answered
P

2

6

Using the new Angular 4.3 HttpClient, how can I upload and access files in an ASP.NET Core 2.0 Controller while reporting upload progress to the client?

Ponytail answered 13/9, 2017 at 20:51 Comment(0)
P
14

Here is a working example to get started:

HTML

<input #file type="file" multiple (change)="upload(file.files)" />
<span *ngIf="uploadProgress > 0 && uploadProgress < 100">
    {{uploadProgress}}%
</span>

TypeScript

import { Component } from '@angular/core';
import { HttpClient, HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http'

@Component({
    selector: 'files',
    templateUrl: './files.component.html',
})
export class FilesComponent {
    public uploadProgress: number;

    constructor(private http: HttpClient) { }

    upload(files) {
        if (files.length === 0)
            return;

        const formData = new FormData();

        for (let file of files)
            formData.append(file.name, file);

        const req = new HttpRequest('POST', `api/files`, formData, {
            reportProgress: true,
        });

        this.http.request(req).subscribe(event => {
            if (event.type === HttpEventType.UploadProgress)
                this.uploadProgress = Math.round(100 * event.loaded / event.total);
            else if (event instanceof HttpResponse)
                console.log('Files uploaded!');
        });
    }
}

Controller

[HttpPost, DisableRequestSizeLimit, Route("api/files")]
public async Task UploadFiles()
{
    var files = Request.Form.Files; // now you have them
}
Ponytail answered 13/9, 2017 at 20:51 Comment(2)
I was almost done with my own solution and got stuck, replaced with this awesomeness. Thank youLakieshalakin
I can not find @angular/common/httpCharitycharivari
T
0

You could use the interface Microsoft.AspNetCore.Http.IFormFile that represents a file sent with the HttpRequest to simplify the access to file.

[HttpPost, DisableRequestSizeLimit, Route("api/files")]
public async Task UploadFiles(IFormFile file){
    //your file stream
    var stream = file.OpenReadStream();
}
Thomson answered 12/1, 2018 at 16:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.