An Angular module for simple desktop file and folder drag and drop. This library does not need rxjs-compat.
For previous Angular support please use older versions.
This library relies on HTML 5 File API thus IE is not supported
You can check the DEMO of the library
npm install ngx-file-drop --save
import{BrowserModule}from'@angular/platform-browser';import{NgModule}from'@angular/core';import{FormsModule}from'@angular/forms';import{HttpClientModule}from'@angular/common/http';import{AppComponent}from'./app.component';import{NgxFileDropModule}from'ngx-file-drop'; @NgModule({declarations: [AppComponent],imports: [BrowserModule,FormsModule,HttpClientModule,NgxFileDropModule],providers: [],bootstrap: [AppComponent]})exportclassAppModule{}
import{Component}from'@angular/core';import{NgxFileDropEntry,FileSystemFileEntry,FileSystemDirectoryEntry}from'ngx-file-drop'; @Component({selector: 'demo-root',templateUrl: './app.component.html',styleUrls: ['./app.component.scss']})exportclassAppComponent{publicfiles: NgxFileDropEntry[]=[];publicdropped(files: NgxFileDropEntry[]){this.files=files;for(constdroppedFileoffiles){// Is it a file?if(droppedFile.fileEntry.isFile){constfileEntry=droppedFile.fileEntryasFileSystemFileEntry;fileEntry.file((file: File)=>{// Here you can access the real fileconsole.log(droppedFile.relativePath,file);/** // You could upload it like this: const formData = new FormData() formData.append('logo', file, relativePath) // Headers const headers = new HttpHeaders({ 'security-token': 'mytoken' }) this.http.post('https://mybackend.com/api/upload/sanitize-and-save-logo', formData, { headers: headers, responseType: 'blob' }) .subscribe(data => { // Sanitized logo returned from backend }) **/});}else{// It was a directory (empty directories are added, otherwise only files)constfileEntry=droppedFile.fileEntryasFileSystemDirectoryEntry;console.log(droppedFile.relativePath,fileEntry);}}}publicfileOver(event){console.log(event);}publicfileLeave(event){console.log(event);}}
<divclass="center"><ngx-file-dropdropZoneLabel="Drop files here" (onFileDrop)="dropped($event)" (onFileOver)="fileOver($event)" (onFileLeave)="fileLeave($event)"><ng-templatengx-file-drop-content-tmplet-openFileSelector="openFileSelector"> Optional custom content that replaces the the entire default content. <buttontype="button" (click)="openFileSelector()">Browse Files</button></ng-template></ngx-file-drop><divclass="upload-table"><tableclass="table"><thead><tr><th>Name</th></tr></thead><tbodyclass="upload-name-style"><tr*ngFor="let item of files; let i=index"><td><strong>{{ item.relativePath }}</strong></td></tr></tbody></table></div></div>
Name | Description | Example |
---|---|---|
(onFileDrop) | On drop function called after the files are read | (onFileDrop)="dropped($event)" |
(onFileOver) | On drop over function | (onFileOver)="fileOver($event)" |
(onFileLeave) | On drop leave function | (onFileLeave)="fileLeave($event)" |
accept | String of accepted formats | accept=".png" |
directory | Whether directories are accepted | directory="true" |
dropZoneLabel | Text to be displayed inside the drop box | dropZoneLabel="Drop files here" |
dropZoneClassName | Custom style class name(s) to be used on the "drop-zone" area | dropZoneClassName="my-style" |
contentClassName | Custom style class name(s) to be used for the content area | contentClassName="my-style" |
[disabled] | Conditionally disable the dropzone | [disabled]="condition" |
[showBrowseBtn] | Whether browse file button should be shown | [showBrowseBtn]="true" |
browseBtnClassName | Custom style class name(s) to be used for the button | browseBtnClassName="my-style" |
browseBtnLabel | The label of the browse file button | browseBtnLabel="Browse files" |
multiple | Whether multiple or single files are accepted | multiple="true" |
useDragEnter | Use dragenter event instead of dragover | useDragEnter="true" |
- Bitcoin: 18yJcRSyY7J9K7kHrkNQ2JspLfSgLKWUnh
- Ethereum: 0xdF1E80c91599CA6d4a8745888e658f45B86b0FEd