Загрузка файла в Angular 4

когда я пытаюсь установить    "npm install ng2-file-upload --save" в моем приложении angular 4 он бросает

UNMET PEER DEPENDENCY @4.1.0
UNMET PEER DEPENDENCY @4.1.0
`-- [email protected]

и загрузка не работает мои приложения бросают

"Невозможно связать с" загрузчиком ", так как это не известное свойство" input "

это мой HTML

<input type="file" ng2FileSelect [uploader]="upload" multiple formControlName="file" id="file"/>

и его Компонент

import { FileUploadModule } from 'ng2-file-upload/ng2-file-upload';   
import { FileSelectDirective, FileUploader } from 'ng2-file-upload/ng2-file-
upload';

export class PersonalInfoComponent implements OnInit
{
    public upload:FileUploader= new FileUploader({url:""});
}

Родительский модуль

import { FileUploadModule } from 'ng2-file-upload/ng2-file-upload';

@NgModule({

imports: [
..
....
..
FileUploadModule
],

export class RegistrationModule { }

и я не импортировал/не изменял ничего в AppModule (Grand Parent Module).

может кто-нибудь помочь мне в этом, пожалуйста...

Ответ 1

Загрузка изображений в Angular 4 без плагина Это статья, которая, возможно, стоит попробовать. Загрузить изображения в Angular 4 без плагина

Он подчеркивает эти моменты:

  • Использование метода .request() вместо .post
  • Отправка формыДата прямо в тело.
  • Настройка элементов заголовка и построение нового RequestOptions объект.
  • Чтобы отправить formData с содержимым изображения, вы должны удалить заголовок Content-Type.

Ответ 2

Для общего решения необходимо создать новый модуль, например shared module. Вам просто нужно создать общий модуль, например это и импортировать общий модуль в app.module файл

import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';

import { FileSelectDirective, FileDropDirective } from 'ng2-file-upload';
import { FileUploadModule } from 'ng2-file-upload/ng2-file-upload';

@NgModule({
     imports: [ FileUploadModule],  
     declarations: [ ],
     exports :[ FileSelectDirective, FileDropDirective, FormsModule,
               FileUploadModule],
})
export class SharedModule { }

просто импортируйте share.module в свой app.module, как это.

import { NgModule } from '@angular/core';
import { SharedModule} from '../shared/shared.module';

@NgModule({
    imports: [SharedModule],
    declarations: [],
    exports :[],
   })
export class AppModule { }

взгляните на ленивую загрузку в angular 4

Ответ 3

Я не думаю, что нам нужны дополнительные библиотеки

onFileChange(event){
   let files = event.target.files; 
   this.saveFiles(files);
    }
@HostListener('dragover', ['$event']) onDragOver(event) {
    this.dragAreaClass = "droparea";
    event.preventDefault();
}
@HostListener('dragenter', ['$event']) onDragEnter(event) {
    this.dragAreaClass = "droparea";
    event.preventDefault();
}
@HostListener('dragend', ['$event']) onDragEnd(event) {
    this.dragAreaClass = "dragarea";
    event.preventDefault();
}
@HostListener('dragleave', ['$event']) onDragLeave(event) {
    this.dragAreaClass = "dragarea";
    event.preventDefault();
}
@HostListener('drop', ['$event']) onDrop(event) {   
    this.dragAreaClass = "dragarea";           
    event.preventDefault();
    event.stopPropagation();
    var files = event.dataTransfer.files;
    this.saveFiles(files);
}

И теперь мы готовы загрузить файлы с перетаскиванием, а также нажав кнопку ссылки и загрузить дополнительные данные с файлами.

Смотрите полную статью здесь Angular 4 загружать файлы с данными и веб-api путем перетаскивания

Ответ 4

Для этого вам не нужна внешняя библиотека, проверьте ниже пример кода

@Component({
    selector: 'app-root',
    template: '<div>'
        + '<input type="file" (change)="upload($event)">'
        + '</div>',
})

export class AppComponent {

    constructor(private _service: commonService) { }

    upload(event: any) {
        let files = event.target.files;
        let fData: FormData = new FormData;

        for (var i = 0; i < files.length; i++) {
            fData.append("file[]", files[i]);
        }
        var _data = {
            filename: 'Sample File',
            id: '0001'
        }

        fData.append("data", JSON.stringify(_data));

        this._service.uploadFile(fData).subscribe(
            response => this.handleResponse(response),
            error => this.handleError(error)
        )
    }
    handleResponse(response: any) {
        console.log(response);
    }
    handleError(error: string) {
        console.log(error);
    }
}

Дополнительная информация

Ответ 5

HTML:

<input type="file" (change)="onFileChange($event)" id="file">

TS:

@Component({
  ......
})

export class myComponent{

    form: FormGroup;

    contructor(fb: FormGroup){
       form: fb.group({file: null});
    }

 //fVals comes from HTML Form -> (ngSubmit)="postImage(form.value)" 
    postImage(fVals){
      let body = new FormData();
      body.append('file', formValues.file);

      let httpRequest = httpclient.post(url, body);
      httpRequest.subscribe((response) =>{
         //..... handle response here
      },(error) => {
         //.....handle errors here
      });
   }

   onFileChange(event) {
     if(event.target.files.length > 0) {
       let file = event.target.files[0];
       this.form.get('file').setValue(file);
     }
   }
}