or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

constructor-config.mdevent-system.mdfile-management.mdindex.mdstatic-utilities.mdthumbnails.mdupload-processing.md
tile.json

file-management.mddocs/

File Management

Comprehensive file addition, removal, validation, and querying functionality for managing uploaded files throughout their lifecycle.

Capabilities

File Addition

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);

File Removal

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);

File Validation

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"));
  }
});

File Querying

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);
});

File Queue Management

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();
});

File Properties and Status

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
});

Utility Methods

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
  }
});