peterfreeman / ngx-dropzone

A highly configurable dropzone component for Angular.
133 stars 58 forks source link
angular drag-and-drop dropzone file image ngx-dropzone preview upload

Warning

This repository is DEPRECATED and will no longer receive any updates!

Unfortunately, I don't have the time to maintain this repo anymore. Take a look at the official successor repo hackingharold/ngx-dropzone for further maintenance. For the still active users, there are a bunch of forks available, feel free to use any of those for your projects if you don't want to switch to the new implementation.

ngx-dropzone (🚫 deprecated!)

A lightweight and highly customizable Angular dropzone component for file uploads.

NPM Build Status

For a demo see DEMO. And the CODE for the demo.

Install

$ npm install --save ngx-dropzone

Usage

// in app.module.ts
import { NgxDropzoneModule } from 'ngx-dropzone';

@NgModule({
  ...
  imports: [
    NgxDropzoneModule
  ],
  ...
})
export class AppModule { }
<!-- in app.component.html -->
<ngx-dropzone (change)="onSelect($event)">
    <ngx-dropzone-label>Drop it, baby!</ngx-dropzone-label>
    <ngx-dropzone-preview *ngFor="let f of files" [removable]="true" (removed)="onRemove(f)">
        <ngx-dropzone-label>{{ f.name }} ({{ f.type }})</ngx-dropzone-label>
    </ngx-dropzone-preview>
</ngx-dropzone>
// in app.component.ts
files: File[] = [];

onSelect(event) {
  console.log(event);
  this.files.push(...event.addedFiles);
}

onRemove(event) {
  console.log(event);
  this.files.splice(this.files.indexOf(event), 1);
}

You can also use special preview components to preview images or videos:

<ngx-dropzone-image-preview ngProjectAs="ngx-dropzone-preview" *ngFor="let f of files" [file]="f">
  <ngx-dropzone-label>{{ f.name }} ({{ f.type }})</ngx-dropzone-label>
</ngx-dropzone-image-preview>
<ngx-dropzone-video-preview ngProjectAs="ngx-dropzone-preview" *ngFor="let f of files" [file]="f">
  <ngx-dropzone-label>{{ f.name }} ({{ f.type }})</ngx-dropzone-label>
</ngx-dropzone-video-preview>

Component documentation

ngx-dropzone

This component is the actual dropzone container. It contains the label and any file previews. It has an event listener for file drops and you can also click it to open the native file explorer for selection.

Use it as a stand-alone component <ngx-dropzone></ngx-dropzone> or by adding it as an attribute to a custom div (<div class="custom-dropzone" ngx-dropzone></div>). It will add the classes ngx-dz-hovered and ngx-dz-disabled to its host element if necessary. You could override the styling of these effects if you like to.

This component has the following Input properties:

It has the following Output event:

The RejectedFile extends the native File and adds an optional reason property to tell you why the file was rejected. Its value will be either 'type' for the wrong acceptance type, size if it exceeds the maximum file size or no_multiple if multiple is set to false and more than one file is provided.

If you'd like to show the native file selector programmatically then do it as follows:

<ngx-dropzone #drop></ngx-dropzone>
<button (click)="drop.showFileSelector()">Open</button>

ngx-dropzone-label

This component has no attributes or methods and acts as a container for the label text using content projection. You can place anything inside of it and the text will always be centered.

ngx-dropzone-preview

This component shows a basic file preview when added inside the dropzone container. The previews can be focused using the tab key and be deleted using the backspace or delete keys.

This component has the following Input properties:

It has the following Output event:

The ngx-dropzone-image-preview and ngx-dropzone-video-preview components inherit from this component but expand the preview functionality to display either images or videos directly in the component. See the wiki on how to implement your own custom preview components.

ngx-dropzone-remove-badge

This component is used within the previews to remove selected files. You can use it within your own preview component implementation if you like (see the wiki).

Other

How to upload a file to a Web API?

Licence

MIT © Peter Freeman