Comprehensive file addition, removal, validation, and querying functionality for managing uploaded files throughout their lifecycle.
Add files to the dropzone programmatically or handle files from drag and drop events.
/**
* Add a file to the dropzone
* @param file - File object to add
*/
addFile(file: File): void;
/**
* Handle multiple files from drag/drop or file input
* @param files - FileList or array of files to handle
*/
handleFiles(files: FileList | File[]): void;Usage Examples:
const dropzone = new Dropzone("#my-dropzone", { url: "/upload" });
// Add file programmatically
const file = new File(["content"], "example.txt", { type: "text/plain" });
dropzone.addFile(file);
// Handle files from input element
document.getElementById("file-input").addEventListener("change", function(e) {
dropzone.handleFiles(e.target.files);
});
// Add files with metadata
const fileWithMetadata = new File(["data"], "document.pdf", { type: "application/pdf" });
fileWithMetadata.customProperty = "custom value";
dropzone.addFile(fileWithMetadata);Remove files from the dropzone, with support for canceling ongoing uploads.
/**
* Remove a specific file from the dropzone
* @param file - File object to remove
*/
removeFile(file: File): void;
/**
* Remove all files from the dropzone
* @param cancelIfNecessary - Whether to cancel uploads in progress
*/
removeAllFiles(cancelIfNecessary?: boolean): void;Usage Examples:
const dropzone = new Dropzone("#my-dropzone", { url: "/upload" });
// Remove specific file
dropzone.on("addedfile", function(file) {
// Add remove button
const removeButton = document.createElement("button");
removeButton.innerHTML = "Remove";
removeButton.onclick = () => dropzone.removeFile(file);
file.previewElement.appendChild(removeButton);
});
// Remove all files and cancel uploads
dropzone.removeAllFiles(true);
// Remove only completed files (don't cancel uploads)
dropzone.removeAllFiles(false);Validate files before they are added to the upload queue.
/**
* Validate a file and call done callback with result
* @param file - File to validate
* @param done - Callback function, call with error message to reject
*/
accept(file: File, done: (error?: string) => void): void;Usage Examples:
const dropzone = new Dropzone("#my-dropzone", {
url: "/upload",
// Custom validation function
accept: function(file, done) {
// File size validation (already handled by maxFilesize option)
if (file.size > 5 * 1024 * 1024) {
done("File too large (max 5MB)");
return;
}
// Custom filename validation
if (file.name.includes("temp")) {
done("Temporary files are not allowed");
return;
}
// Async validation (e.g., check with server)
fetch("/api/validate-file", {
method: "POST",
body: JSON.stringify({ name: file.name, size: file.size }),
headers: { "Content-Type": "application/json" }
})
.then(response => response.json())
.then(result => {
if (result.valid) {
done(); // Accept file
} else {
done(result.error); // Reject file
}
})
.catch(() => done("Validation failed"));
}
});Query files based on their status and acceptance state.
/**
* Get all files that have been accepted for upload
*/
getAcceptedFiles(): File[];
/**
* Get all files that have been rejected
*/
getRejectedFiles(): File[];
/**
* Get files with a specific status
* @param status - File status to filter by
*/
getFilesWithStatus(status: string): File[];
/**
* Get files that are queued for upload
*/
getQueuedFiles(): File[];
/**
* Get files that are currently uploading
*/
getUploadingFiles(): File[];
/**
* Get files that have been added but not yet processed
*/
getAddedFiles(): File[];
/**
* Get files that are either uploading or queued
*/
getActiveFiles(): File[];Usage Examples:
const dropzone = new Dropzone("#my-dropzone", { url: "/upload" });
// Monitor file states
setInterval(() => {
console.log("Queued:", dropzone.getQueuedFiles().length);
console.log("Uploading:", dropzone.getUploadingFiles().length);
console.log("Active:", dropzone.getActiveFiles().length);
}, 1000);
// Get files by status
const completedFiles = dropzone.getFilesWithStatus(Dropzone.SUCCESS);
const errorFiles = dropzone.getFilesWithStatus(Dropzone.ERROR);
// Check if all files are uploaded
function allFilesComplete() {
return dropzone.getActiveFiles().length === 0;
}
// Process only accepted files
dropzone.getAcceptedFiles().forEach(file => {
console.log("Processing:", file.name);
});Add files to the upload queue and manage queue processing.
/**
* Add a file to the upload queue
* @param file - File to enqueue
*/
enqueueFile(file: File): void;
/**
* Add multiple files to the upload queue
* @param files - Array of files to enqueue
*/
enqueueFiles(files: File[]): void;Usage Examples:
const dropzone = new Dropzone("#my-dropzone", {
url: "/upload",
autoQueue: false, // Don't auto-queue files
autoProcessQueue: false // Don't auto-process queue
});
// Manual queue management
dropzone.on("addedfile", function(file) {
// Add file to queue when ready
setTimeout(() => {
dropzone.enqueueFile(file);
}, 1000);
});
// Bulk enqueue files
const filesToUpload = dropzone.getAddedFiles();
dropzone.enqueueFiles(filesToUpload);
// Process queue manually
document.getElementById("upload-btn").addEventListener("click", () => {
dropzone.processQueue();
});Understanding file objects and their properties throughout the upload lifecycle.
interface DropzoneFile extends File {
// Standard File properties
name: string;
size: number;
type: string;
lastModified: number;
// Dropzone-specific properties
status: string; // File status constant
accepted: boolean; // Whether file passed validation
upload?: {
progress: number; // Upload progress (0-100)
total: number; // Total bytes to upload
bytesSent: number; // Bytes uploaded so far
filename: string; // Filename for upload
};
xhr?: XMLHttpRequest; // XMLHttpRequest object for upload
previewElement?: HTMLElement; // DOM element for file preview
previewTemplate?: string; // HTML template for preview
width?: number; // Image width (for images)
height?: number; // Image height (for images)
// Custom properties can be added
[key: string]: any;
}
// File status constants
const FILE_STATUS = {
ADDED: "added",
QUEUED: "queued",
UPLOADING: "uploading",
CANCELED: "canceled",
ERROR: "error",
SUCCESS: "success"
};Usage Examples:
const dropzone = new Dropzone("#my-dropzone", { url: "/upload" });
dropzone.on("addedfile", function(file) {
console.log("File added:", {
name: file.name,
size: file.size,
type: file.type,
status: file.status, // "added"
accepted: file.accepted // undefined initially
});
});
dropzone.on("processing", function(file) {
console.log("File processing:", file.status); // "uploading"
});
dropzone.on("uploadprogress", function(file, progress, bytesSent) {
console.log(`${file.name}: ${progress}% (${bytesSent}/${file.upload.total})`);
});
dropzone.on("success", function(file, response) {
console.log("File completed:", file.status); // "success"
file.serverResponse = response; // Add custom property
});Additional utility methods for file management.
/**
* Format file size for display
* @param size - Size in bytes
*/
filesize(size: number): string;
/**
* Get parameter name for file upload
* @param n - File index
*/
_getParamName(n: number): string;
/**
* Rename filename before upload
* @param name - Original filename
*/
_renameFilename(name: string): string;Usage Examples:
const dropzone = new Dropzone("#my-dropzone", { url: "/upload" });
// Display formatted file sizes
dropzone.on("addedfile", function(file) {
const sizeStr = dropzone.filesize(file.size);
console.log(`${file.name} (${sizeStr})`);
});
// Custom file renaming
const dropzoneWithRename = new Dropzone("#my-dropzone", {
url: "/upload",
renameFilename: function(name) {
return Date.now() + "_" + name; // Prefix with timestamp
}
});