UNPKG

vite-upload-assets-oss

Version:

🚀 A powerful Vite plugin that automatically uploads media assets to multiple cloud storage providers (OSS, COS, S3, OBS) and replaces references with CDN URLs. Supports multiple import methods, caching, and concurrent uploads. | 一个强大的Vite插件,自动将媒体资源上传到多个云

249 lines (234 loc) 6.02 kB
import { Plugin } from 'vite'; /** * 云存储抽象接口 * Cloud Storage Abstract Interface */ interface AssetInfo$1 { filePath: string; fileName: string; fileSize: number; fileHash: string; mimeType: string; } interface UploadResult$1 { success: boolean; filePath: string; url: string; size: number; error?: Error; } interface CloudStorageConfig$1 { provider: 'oss' | 'cos' | 's3' | 'obs'; publicPath: string; prefix?: string; [key: string]: any; } /** * 云存储抽象基类 */ declare abstract class CloudStorageProvider { protected config: CloudStorageConfig$1; protected uploadResults: Map<string, UploadResult$1>; constructor(config: CloudStorageConfig$1); /** * 初始化客户端连接 */ abstract initialize(): Promise<void>; /** * 上传单个文件 */ abstract uploadFile(asset: AssetInfo$1, content: Buffer): Promise<UploadResult$1>; /** * 批量上传文件 */ abstract uploadAssets(assets: { asset: AssetInfo$1; content: Buffer; }[]): Promise<void>; /** * 检查文件是否存在 */ abstract fileExists(filePath: string): Promise<boolean>; /** * 删除文件 */ abstract deleteFile(filePath: string): Promise<boolean>; /** * 生成文件完整URL */ getFileUrl(filePath: string): string; /** * 获取上传结果 */ getUploadResult(filePath: string): UploadResult$1 | undefined; /** * 获取所有上传结果 */ getAllUploadResults(): Map<string, UploadResult$1>; /** * 清理资源 */ cleanup(): void; /** * 生成目标文件路径 */ protected generateTargetPath(asset: AssetInfo$1): string; } /** * 云存储工厂类 */ declare class CloudStorageFactory { static providers: Map<string, typeof CloudStorageProvider>; /** * 注册存储提供商 */ static registerProvider(name: string, provider: typeof CloudStorageProvider): void; /** * 创建存储提供商实例 */ static createProvider(config: CloudStorageConfig$1): CloudStorageProvider; /** * 获取支持的提供商列表 */ static getSupportedProviders(): string[]; } /** * 华为云OBS存储提供商 * Huawei Cloud OBS Storage Provider */ interface OBSConfig extends CloudStorageConfig$1 { provider: 'obs'; obs: { accessKeyId: string; secretAccessKey: string; bucket: string; endpoint: string; signature?: string; timeout?: number; }; maxConcurrency?: number; cache?: boolean; cacheFile?: string; verbose?: boolean; } /** * AWS S3存储提供商 * AWS S3 Storage Provider */ interface S3Config extends CloudStorageConfig$1 { provider: 's3'; s3: { accessKeyId: string; secretAccessKey: string; bucket: string; region: string; endpoint?: string; s3ForcePathStyle?: boolean; signatureVersion?: string; timeout?: number; }; maxConcurrency?: number; cache?: boolean; cacheFile?: string; verbose?: boolean; } /** * 腾讯云COS存储提供商 * Tencent Cloud COS Storage Provider */ interface COSConfig extends CloudStorageConfig$1 { provider: 'cos'; cos: { secretId: string; secretKey: string; bucket: string; region: string; appId?: string; domain?: string; protocol?: 'http' | 'https'; timeout?: number; }; maxConcurrency?: number; cache?: boolean; cacheFile?: string; verbose?: boolean; } /** * 阿里云OSS存储提供商 * Alibaba Cloud OSS Storage Provider */ interface OSSConfig extends CloudStorageConfig$1 { provider: 'oss'; oss: { accessKeyId: string; accessKeySecret: string; bucket: string; region: string; endpoint?: string; secure?: boolean; timeout?: number; }; maxConcurrency?: number; cache?: boolean; cacheFile?: string; verbose?: boolean; } type AllCloudConfig = OSSConfig | COSConfig | S3Config | OBSConfig; /** * 云存储配置基础类型 * Cloud Storage Configuration Base Types */ interface CloudStorageConfig { /** 包含的文件扩展名 */ include: string[]; /** 排除的文件扩展名 */ exclude?: string[]; /** 最小文件大小(字节),小于此大小的文件不上传 */ minSize?: number; /** 最大并发上传数 */ maxConcurrency?: number; /** 文件路径前缀模板 */ prefix?: string; /** CDN公网访问域名 */ publicPath: string; /** 是否启用本地缓存 */ cache?: boolean; /** 缓存文件路径 */ cacheFile?: string; /** 开发模式下是否跳过上传 */ dev?: boolean; /** 是否显示详细日志 */ verbose?: boolean; } /** * 插件配置类型(由各个提供商配置组成联合类型) * Plugin Options Type (Union type of all provider configs) */ type PluginOptions = OSSConfig | COSConfig | S3Config | OBSConfig; /** * 资源信息 * Asset Information */ interface AssetInfo { filePath: string; fileName: string; fileSize: number; fileHash: string; mimeType: string; } /** * 上传结果 * Upload Result */ interface UploadResult { success: boolean; filePath: string; url: string; size: number; error?: Error; } declare function createViteCloudPlugin(options: PluginOptions): Plugin; declare const viteCloudUpload: typeof createViteCloudPlugin; declare const viteOSSUpload: typeof createViteCloudPlugin; export { CloudStorageFactory, CloudStorageProvider, createViteCloudPlugin, createViteCloudPlugin as createViteOSSPlugin, createViteCloudPlugin as default, viteCloudUpload, viteOSSUpload }; export type { AllCloudConfig, AssetInfo, COSConfig, CloudStorageConfig, OBSConfig, OSSConfig, PluginOptions, S3Config, UploadResult };