import { Response } from 'express'; import { JpegPipeOptions } from '../image/jpeg.pipe'; import { ThumbnailPipeOptions } from '../image/thumbnail.pipe'; export declare enum StorageMode { LOCAL = "local", QINIU = "qiniu", MINIO = "minio" } export declare class FileInfo { filename: string; path: string; mimetype?: string; extension?: string; constructor(o: FileInfo); } export declare class SavedFile extends FileInfo { readonly bucket: string; readonly region?: string; readonly prefix: string; readonly size?: number; readonly mode: StorageMode; readonly fullpath: string; constructor(o: SavedFile); } export declare type ResolverOpts = { filename: string; bucket: string; prefix?: string; query?: object; thumbnailConfig?: ThumbnailPipeOptions; jpegConfig?: JpegPipeOptions; resolver?: (url: string) => Promise; }; export interface IStorageEngine { /** * 这里会创建一个上传任务,异步执行 * @param file * @param opts */ saveEntity(file: FileInfo, opts: { bucket?: string; prefix?: string; region?: string; }): Promise; listEntities(opts: { bucket?: string; prefix?: string; }): Promise; removeEntities(opts: { bucket?: string; prefix?: string; filename?: string; }): Promise; /** * 如果是远程仓库,该命令应该先下载文件。然后和本地仓库一样,返回文件信息 * @param fileInfo * @param toPath? 保存文件目录的一个可选项,对本地仓库来说,应该直接略过该参数 */ getEntity(fileInfo: SavedFile, toPath?: string): Promise; /** * 返回相应的 url,在包含 res 时直接通过 res 返回相应的信息 * TODO need redesign */ resolveUrl(opts: ResolverOpts): Promise; resolveUrl(opts: ResolverOpts, res: Response): Promise; } export declare function yearMonthStr(): string;