@cvo/plugin-storage
v0.0.0
Published
Storage plugin for CVO Framework
Downloads
47
Readme
@cvo/plugin-storage
A flexible file storage abstraction plugin for CVO Framework. It provides a unified API to handle file operations across different storage backends (Local, S3, OSS, etc.).
🚀 Features
- Unified Storage API: Standardized methods for
put,get,delete,exists, andgetUrl. - Local Provider: Built-in support for the local filesystem with automatic directory management.
- Extensible Architecture: Easily implement custom providers for cloud storage services.
- DI Integration: Fully integrated with CVO's dependency injection for easy access in services and controllers.
🛠 Configuration
Register the storage plugin in your cvo.config.ts:
import { defineConfig } from '@cvo/core';
import { StoragePlugin, LocalStorageProvider } from '@cvo/plugin-storage';
export default defineConfig({
plugins: [
new StoragePlugin(new LocalStorageProvider({
rootDir: 'public/uploads' // Root directory for local files
}))
]
});🧠 Usage
Access the storage provider using the useStorage helper or via the injector.
import { useStorage } from '@cvo/server'; // Recommended helper
export async function handleFileUpload(filename: string, buffer: Buffer) {
const storage = useStorage();
// Save file
await storage.put(`avatars/${filename}`, buffer);
// Check existence
if (await storage.exists(`avatars/${filename}`)) {
// Get public URL
const url = await storage.getUrl(`avatars/${filename}`);
return { url };
}
}🔌 Custom Providers
To implement a custom provider (e.g., for AWS S3):
import { StorageProvider } from '@cvo/plugin-storage';
export class S3StorageProvider implements StorageProvider {
async put(filePath: string, content: Buffer | string): Promise<void> { /* ... */ }
async get(filePath: string): Promise<Buffer> { /* ... */ }
async delete(filePath: string): Promise<void> { /* ... */ }
async exists(filePath: string): Promise<boolean> { /* ... */ }
async getUrl(filePath: string): Promise<string> { /* ... */ }
}