multer-utility
Version:
A comprehensive TypeScript wrapper for Multer with enhanced features including memory/disk storage, flexible configuration, and file management utilities
126 lines • 4.15 kB
TypeScript
import multer from "multer";
import { Request } from "express";
export interface UploadConfig {
storage?: 'disk' | 'memory';
uploadDir?: string;
allowedMimeTypes?: string[];
allowedExtensions?: string[];
maxFileSize?: number;
useTimestamp?: boolean;
sanitizeFilenames?: boolean;
customNaming?: (file: Express.Multer.File) => string;
createDirIfNotExists?: boolean;
preserveOriginalName?: boolean;
}
export interface FileValidationResult {
isValid: boolean;
error?: string;
}
export interface MulterUtilityRequest extends Request {
file?: Express.Multer.File;
files?: Express.Multer.File[] | {
[fieldname: string]: Express.Multer.File[];
};
}
export declare class UploadService {
private readonly config;
private readonly uploader;
private static readonly DEFAULT_CONFIG;
constructor(config?: UploadConfig);
/**
* Ensure upload directory exists
*/
private ensureUploadDirExists;
/**
* Get storage engine based on configuration
*/
private getStorageEngine;
/**
* Generate filename based on configuration
*/
private generateFilename;
/**
* File filter for validation
*/
private fileFilter;
/**
* Validate file against configured rules
*/
validateFile(file: Express.Multer.File): FileValidationResult;
/**
* Upload single file
*/
single(fieldName: string): import("express").RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
/**
* Upload multiple files (array)
*/
array(fieldName: string, maxCount?: number): import("express").RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
/**
* Upload multiple files (different fields)
*/
fields(fields: multer.Field[]): import("express").RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
/**
* Handle any files
*/
any(): import("express").RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
/**
* No files expected
*/
none(): import("express").RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
/**
* Get upload configuration
*/
getConfig(): Required<UploadConfig>;
/**
* Get file info for uploaded file
*/
getFileInfo(file: Express.Multer.File): {
originalName: string;
filename: string;
mimetype: string;
size: number;
encoding: string;
fieldname: string;
destination: string;
path: string;
buffer: Buffer<ArrayBufferLike>;
};
/**
* Delete uploaded file (disk storage only)
*/
deleteFile(filename: string): Promise<boolean>;
/**
* Check if file exists (disk storage only)
*/
fileExists(filename: string): boolean;
/**
* Get file path (disk storage only)
*/
getFilePath(filename: string): string;
/**
* Get upload directory stats
*/
getUploadStats(): Promise<{
message: string;
totalFiles?: undefined;
totalSize?: undefined;
files?: undefined;
} | {
totalFiles: number;
totalSize: number;
files: {
name: string;
size: number;
created: Date;
modified: Date;
}[];
message?: undefined;
}>;
}
export declare const createDiskUploader: (uploadDir: string, config?: Partial<UploadConfig>) => UploadService;
export declare const createMemoryUploader: (config?: Partial<UploadConfig>) => UploadService;
export declare const createImageUploader: (uploadDir?: string) => UploadService;
export declare const createAudioUploader: (uploadDir?: string) => UploadService;
export { MulterError } from 'multer';
export type { Request } from 'express';
//# sourceMappingURL=index.d.ts.map