From 37e42972af3449273e0f219b112ee051fd353225 Mon Sep 17 00:00:00 2001 From: Innei Date: Fri, 8 Jul 2022 13:25:20 +0800 Subject: [PATCH] perf: use read stream to transfer data Signed-off-by: Innei --- src/modules/backup/backup.service.ts | 6 +----- src/modules/file/file.controller.ts | 4 ++-- src/modules/file/file.service.ts | 4 ++-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/modules/backup/backup.service.ts b/src/modules/backup/backup.service.ts index 2a65b966..48a40344 100644 --- a/src/modules/backup/backup.service.ts +++ b/src/modules/backup/backup.service.ts @@ -2,7 +2,6 @@ import { existsSync, statSync } from 'fs' import { readFile, readdir, rm, writeFile } from 'fs/promises' import mkdirp from 'mkdirp' import { join, resolve } from 'path' -import { Readable } from 'stream' import { quiet } from 'zx-cjs' import { @@ -116,10 +115,7 @@ export class BackupService { async getFileStream(dirname: string) { const path = this.checkBackupExist(dirname) - const stream = new Readable() - - stream.push(await readFile(path)) - stream.push(null) + const stream = fs.createReadStream(path) return stream } diff --git a/src/modules/file/file.controller.ts b/src/modules/file/file.controller.ts index cb4b7e6d..02583665 100644 --- a/src/modules/file/file.controller.ts +++ b/src/modules/file/file.controller.ts @@ -47,7 +47,7 @@ export class FileController { const mimetype = lookup(ext) try { - const buffer = await this.service.getFile(type, name) + const stream = this.service.getFileStream(type, name) if (mimetype) { reply.type(mimetype) reply.header('cache-control', 'public, max-age=31536000') @@ -57,7 +57,7 @@ export class FileController { ) } - reply.send(buffer) + reply.send(stream) } catch { throw new CannotFindException() } diff --git a/src/modules/file/file.service.ts b/src/modules/file/file.service.ts index edb5d40d..6e2dc843 100644 --- a/src/modules/file/file.service.ts +++ b/src/modules/file/file.service.ts @@ -24,8 +24,8 @@ export class FileService { .catch(() => false) } - async getFile(type: FileType, name: string) { - return await fs.readFile(this.resolveFilePath(type, name)) + getFileStream(type: FileType, name: string) { + return fs.createReadStream(this.resolveFilePath(type, name)) } writeFile(