Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save tomalex0/43eb8b26cc7d9a9a6aa611d5c9b7c0c9 to your computer and use it in GitHub Desktop.
Save tomalex0/43eb8b26cc7d9a9a6aa611d5c9b7c0c9 to your computer and use it in GitHub Desktop.

Revisions

  1. @arciisine arciisine created this gist Oct 16, 2016.
    56 changes: 56 additions & 0 deletions Simple File Upload Component
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,56 @@
    import { Component, Input, AfterViewInit } from '@angular/core';
    import { NgModel, DefaultValueAccessor, NgControl } from '@angular/forms';
    import { Http, Headers, RequestOptions } from '@angular/http';

    @Component({
    selector: 'app-file-uploader',
    template: '<input type="file" (change)="updated($event);">',
    providers: [NgModel, DefaultValueAccessor]
    })
    export class FileUploaderComponent implements AfterViewInit {

    static ROOT = '/rest/asset';

    @Input() private companyId: string = '';
    private value: string;
    private changeListener: Function;

    constructor(private http: Http, private input: NgControl) {
    this.input.valueAccessor = this;
    }

    ngAfterViewInit() {
    }

    writeValue(obj: any): void {
    this.value = obj;
    }

    registerOnChange(fn: any): void {
    this.changeListener = fn;
    }

    registerOnTouched(fn: any): void {

    }

    updated($event) {
    const files = $event.target.files || $event.srcElement.files;
    const file = files[0];
    const formData = new FormData();
    formData.append('file', file);

    const headers = new Headers({});
    let options = new RequestOptions({ headers });
    let url = FileUploaderComponent.ROOT + (this.companyId ? '/' + this.companyId : '');

    this.http.post(url, formData, options).subscribe(res => {
    let body = res.json();
    this.value = body.filename;

    if (this.changeListener) {
    this.changeListener(this.value);
    }
    });
    }
    }