Lightweight JavaScript library that transforms HTML elements into drag-and-drop file upload zones with thumbnail previews, progress tracking, and extensive customization options.
npx @tessl/cli install tessl/npm-dropzone@4.3.0Dropzone.js is a lightweight JavaScript library that transforms HTML elements into drag-and-drop file upload zones. It provides comprehensive file upload functionality with support for image thumbnails, progress tracking, multiple file uploads, and extensive customization options, all without requiring jQuery or other dependencies.
npm install dropzoneES6 Modules:
import Dropzone from "dropzone";CommonJS:
const Dropzone = require("dropzone");Browser (global):
<script src="dropzone.js"></script>
<!-- Dropzone is available as global variable -->AMD:
require(["dropzone"], function(Dropzone) {
// Use Dropzone
});import Dropzone from "dropzone";
// Automatic initialization on elements with .dropzone class
// Just add class="dropzone" to any form or div element
// Manual initialization
const myDropzone = new Dropzone("#my-dropzone", {
url: "/file/post",
maxFilesize: 2, // MB
acceptedFiles: "image/*",
maxFiles: 5
});
// Listen to events
myDropzone.on("success", function(file, response) {
console.log("Upload successful:", file.name);
});
myDropzone.on("error", function(file, errorMessage) {
console.log("Upload failed:", errorMessage);
});Dropzone.js is built around several key components:
Dropzone class extending Emitter for event-driven functionality.dropzone classCore Dropzone class instantiation and configuration options for creating upload zones.
class Dropzone extends Emitter {
constructor(element: string | HTMLElement, options?: DropzoneOptions);
}
interface DropzoneOptions {
url?: string;
method?: string;
withCredentials?: boolean;
parallelUploads?: number;
uploadMultiple?: boolean;
maxFilesize?: number;
paramName?: string;
createImageThumbnails?: boolean;
maxThumbnailFilesize?: number;
thumbnailWidth?: number;
thumbnailHeight?: number;
filesizeBase?: number;
maxFiles?: number;
params?: object;
clickable?: boolean | string | HTMLElement | HTMLElement[];
ignoreHiddenFiles?: boolean;
acceptedFiles?: string;
autoProcessQueue?: boolean;
autoQueue?: boolean;
addRemoveLinks?: boolean;
previewsContainer?: string | HTMLElement;
hiddenInputContainer?: string;
capture?: string;
renameFilename?: (name: string) => string;
accept?: (file: File, done: (error?: string) => void) => void;
init?: () => void;
forceFallback?: boolean;
fallback?: () => void;
resize?: (file: File) => { srcX: number, srcY: number, srcWidth: number, srcHeight: number, trgX: number, trgY: number, trgWidth: number, trgHeight: number };
// Dictionary options for UI text
dictDefaultMessage?: string;
dictFallbackMessage?: string;
dictFallbackText?: string;
dictFileTooBig?: string;
dictInvalidFileType?: string;
dictResponseError?: string;
dictCancelUpload?: string;
dictCancelUploadConfirmation?: string;
dictRemoveFile?: string;
dictRemoveFileConfirmation?: string;
dictMaxFilesExceeded?: string;
}File addition, removal, and lifecycle management for handling uploaded files.
// File addition and removal
addFile(file: File): void;
removeFile(file: File): void;
removeAllFiles(cancelIfNecessary?: boolean): void;
// File validation
accept(file: File, done: (error?: string) => void): void;
// File querying
getAcceptedFiles(): File[];
getRejectedFiles(): File[];
getFilesWithStatus(status: string): File[];
getQueuedFiles(): File[];
getUploadingFiles(): File[];
getAddedFiles(): File[];
getActiveFiles(): File[];Upload queue management and file processing functionality.
// Queue management
processQueue(): void;
processFile(file: File): void;
processFiles(files: File[]): void;
enqueueFile(file: File): void;
enqueueFiles(files: File[]): void;
// Upload control
uploadFile(file: File): void;
uploadFiles(files: File[]): void;
cancelUpload(file: File): void;Comprehensive event handling system with 25+ events covering the complete upload lifecycle.
// Event management (inherited from Emitter)
on(event: string, handler: Function): Dropzone;
off(event?: string, handler?: Function): Dropzone;
emit(event: string, ...args: any[]): Dropzone;
// Available events
events: string[]; // Array of all available event namesAvailable Events: drop, dragstart, dragend, dragenter, dragover, dragleave, addedfile, addedfiles, removedfile, thumbnail, error, errormultiple, processing, processingmultiple, uploadprogress, totaluploadprogress, sending, sendingmultiple, success, successmultiple, canceled, canceledmultiple, complete, completemultiple, reset, maxfilesexceeded, maxfilesreached, queuecomplete
Automatic image thumbnail creation with customizable dimensions and processing.
createThumbnail(file: File, callback?: (dataUrl: string) => void): void;
createThumbnailFromUrl(file: File, imageUrl: string, callback?: (dataUrl: string) => void, crossOrigin?: string): void;Static utility methods and global configuration for Dropzone instances.
// Instance management
static forElement(element: string | HTMLElement): Dropzone;
static discover(): void;
// Utility methods
static createElement(string: string): HTMLElement;
static elementInside(element: HTMLElement, container: HTMLElement): boolean;
static getElement(el: string | HTMLElement, name: string): HTMLElement;
static getElements(els: string | HTMLElement | HTMLElement[], name: string): HTMLElement[];
static confirm(question: string, accepted: () => void, rejected?: () => void): void;
static isValidFile(file: File, acceptedFiles: string): boolean;
static isBrowserSupported(): boolean;
// Global configuration
static options: { [elementId: string]: DropzoneOptions | false };
static instances: Dropzone[];
static autoDiscover: boolean;
static version: string;// File status constants
static ADDED: "added";
static QUEUED: "queued";
static ACCEPTED: "queued"; // Alias for QUEUED
static UPLOADING: "uploading";
static PROCESSING: "uploading"; // Alias for UPLOADING
static CANCELED: "canceled";
static ERROR: "error";
static SUCCESS: "success";interface File {
// Standard File properties plus Dropzone additions
name: string;
size: number;
type: string;
status: string;
accepted: boolean;
xhr?: XMLHttpRequest;
previewElement?: HTMLElement;
previewTemplate?: string;
width?: number;
height?: number;
}
interface Emitter {
on(event: string, handler: Function): this;
off(event?: string, handler?: Function): this;
emit(event: string, ...args: any[]): this;
addEventListener(event: string, handler: Function): this;
removeListener(event?: string, handler?: Function): this;
removeAllListeners(event?: string, handler?: Function): this;
removeEventListener(event?: string, handler?: Function): this;
}