multer-azure-blob-storage
Version:
ES5/6 & Typescript friendly multer storage engine for Azure's blob storage.
61 lines (60 loc) • 2.1 kB
TypeScript
import { Request } from "express";
import { StorageEngine } from "multer";
export declare type MetadataObj = {
[k: string]: string;
};
export declare type MASNameResolver = (req: Request, file: Express.Multer.File) => Promise<string>;
export declare type MASObjectResolver = (req: Request, file: Express.Multer.File) => Promise<Object>;
export interface IMASOptions {
accessKey?: string;
accountName?: string;
connectionString?: string;
urlExpirationTime?: number;
blobName?: MASNameResolver;
containerName: MASNameResolver | string;
metadata?: MASObjectResolver | MetadataObj;
contentSettings?: MASObjectResolver | MetadataObj;
containerAccessLevel?: string;
}
export interface MulterOutFile extends Express.Multer.File {
url: string;
etag: string;
metadata: any;
blobName: string;
blobType: string;
blobSize: string;
container: string;
}
export declare class MASError implements Error {
name: string;
message: string;
errorList: any[];
constructor(message?: string);
}
export declare class MulterAzureStorage implements StorageEngine {
private readonly DEFAULT_URL_EXPIRATION_TIME;
private readonly DEFAULT_UPLOAD_CONTAINER;
private readonly DEFAULT_CONTAINER_ACCESS_LEVEL;
private _error;
private _blobService;
private _blobName;
private _urlExpirationTime;
private _metadata;
private _contentSettings;
private _containerName;
private _containerAccessLevel;
constructor(options: IMASOptions);
_handleFile(req: Request, file: Express.Multer.File, cb: (error?: any, info?: Partial<MulterOutFile>) => void): Promise<void>;
_removeFile(req: Request, file: MulterOutFile, cb: (error: Error) => void): Promise<void>;
/** Helpers */
private _doesContainerExists;
private _createContainerIfNotExists;
private _getSasToken;
private _getUrl;
private _getBlobProperties;
private _deleteBlobIfExists;
private _generateBlobName;
private _promisifyStaticValue;
private _promisifyStaticObj;
}
export default MulterAzureStorage;