UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

61 lines (45 loc) 1.57 kB
import urlJoin from 'url-join'; import { fileEnv } from '@/config/file'; import { S3 } from '@/server/modules/S3'; import { FileServiceImpl } from './type'; /** * 基于S3的文件服务实现 */ export class S3StaticFileImpl implements FileServiceImpl { private readonly s3: S3; constructor() { this.s3 = new S3(); } async deleteFile(key: string) { return this.s3.deleteFile(key); } async deleteFiles(keys: string[]) { return this.s3.deleteFiles(keys); } async getFileContent(key: string): Promise<string> { return this.s3.getFileContent(key); } async getFileByteArray(key: string): Promise<Uint8Array> { return this.s3.getFileByteArray(key); } async createPreSignedUrl(key: string): Promise<string> { return this.s3.createPreSignedUrl(key); } async createPreSignedUrlForPreview(key: string, expiresIn?: number): Promise<string> { return this.s3.createPreSignedUrlForPreview(key, expiresIn); } async uploadContent(path: string, content: string) { return this.s3.uploadContent(path, content); } async getFullFileUrl(url?: string | null, expiresIn?: number): Promise<string> { if (!url) return ''; // If bucket is not set public read, the preview address needs to be regenerated each time if (!fileEnv.S3_SET_ACL) { return await this.createPreSignedUrlForPreview(url, expiresIn); } if (fileEnv.S3_ENABLE_PATH_STYLE) { return urlJoin(fileEnv.S3_PUBLIC_DOMAIN!, fileEnv.S3_BUCKET!, url); } return urlJoin(fileEnv.S3_PUBLIC_DOMAIN!, url); } }