File Upload In Angular?

前端 未结 14 2542
执念已碎
执念已碎 2020-11-22 08:10

I know this is very a general question but I am failing to upload a file in Angular 2. I have tried

1) http://valor-software.com/ng2-file-upload/ and

2) h

14条回答
  •  故里飘歌
    2020-11-22 09:09

    From the answers above I build this with Angular 5.x

    Just call uploadFile(url, file).subscribe() to trigger an upload

    import { Injectable } from '@angular/core';
    import {HttpClient, HttpParams, HttpRequest, HttpEvent} from '@angular/common/http';
    import {Observable} from "rxjs";
    
    @Injectable()
    export class UploadService {
    
      constructor(private http: HttpClient) { }
    
      // file from event.target.files[0]
      uploadFile(url: string, file: File): Observable> {
    
        let formData = new FormData();
        formData.append('upload', file);
    
        let params = new HttpParams();
    
        const options = {
          params: params,
          reportProgress: true,
        };
    
        const req = new HttpRequest('POST', url, formData, options);
        return this.http.request(req);
      }
    }
    

    Use it like this in your component

      // At the drag drop area
      // (drop)="onDropFile($event)"
      onDropFile(event: DragEvent) {
        event.preventDefault();
        this.uploadFile(event.dataTransfer.files);
      }
    
      // At the drag drop area
      // (dragover)="onDragOverFile($event)"
      onDragOverFile(event) {
        event.stopPropagation();
        event.preventDefault();
      }
    
      // At the file input element
      // (change)="selectFile($event)"
      selectFile(event) {
        this.uploadFile(event.target.files);
      }
    
      uploadFile(files: FileList) {
        if (files.length == 0) {
          console.log("No file selected!");
          return
    
        }
        let file: File = files[0];
    
        this.upload.uploadFile(this.appCfg.baseUrl + "/api/flash/upload", file)
          .subscribe(
            event => {
              if (event.type == HttpEventType.UploadProgress) {
                const percentDone = Math.round(100 * event.loaded / event.total);
                console.log(`File is ${percentDone}% loaded.`);
              } else if (event instanceof HttpResponse) {
                console.log('File is completely loaded!');
              }
            },
            (err) => {
              console.log("Upload Error:", err);
            }, () => {
              console.log("Upload done");
            }
          )
      }
    

提交回复
热议问题