From d42bc83e3844158c0aba3b6575cd5c5157db9af1 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Sat, 24 Oct 2020 12:28:52 +0200 Subject: [PATCH] FilesystemBackend: Ensure uploads directory exists Signed-off-by: David Mehren --- src/media/backends/filesystem-backend.ts | 28 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/media/backends/filesystem-backend.ts b/src/media/backends/filesystem-backend.ts index 5069fa969..663d50dfc 100644 --- a/src/media/backends/filesystem-backend.ts +++ b/src/media/backends/filesystem-backend.ts @@ -7,33 +7,43 @@ import { BackendData } from '../media-upload.entity'; @Injectable() export class FilesystemBackend implements MediaBackend { + // TODO: Get uploads directory from config + uploadDirectory = './uploads'; + constructor(private readonly logger: ConsoleLoggerService) { this.logger.setContext(FilesystemBackend.name); } + private getFilePath(fileName: string): string { + return join(this.uploadDirectory, fileName); + } + + private async ensureDirectory() { + try { + await fs.access(this.uploadDirectory); + } catch (e) { + await fs.mkdir(this.uploadDirectory); + } + } + async saveFile( buffer: Buffer, fileName: string, ): Promise<[string, BackendData]> { - const filePath = FilesystemBackend.getFilePath(fileName); + const filePath = this.getFilePath(fileName); this.logger.debug(`Writing file to: ${filePath}`, 'saveFile'); + await this.ensureDirectory(); await fs.writeFile(filePath, buffer, null); return ['/' + filePath, null]; } async deleteFile(fileName: string, _: BackendData): Promise { - return fs.unlink(FilesystemBackend.getFilePath(fileName)); + return fs.unlink(this.getFilePath(fileName)); } getFileURL(fileName: string, _: BackendData): Promise { - const filePath = FilesystemBackend.getFilePath(fileName); + const filePath = this.getFilePath(fileName); // TODO: Add server address to url return Promise.resolve('/' + filePath); } - - private static getFilePath(fileName: string): string { - // TODO: Get uploads directory from config - const uploadDirectory = './uploads'; - return join(uploadDirectory, fileName); - } }