From 0808a27965692ce8b426d3e7280603d6f46b9feb Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Thu, 14 Dec 2023 09:34:27 +0700 Subject: [PATCH 1/2] feat: download file --- .../src/controllers/storageController.ts | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/Services/server/src/controllers/storageController.ts b/Services/server/src/controllers/storageController.ts index 0c94d90..17ea543 100644 --- a/Services/server/src/controllers/storageController.ts +++ b/Services/server/src/controllers/storageController.ts @@ -104,6 +104,13 @@ interface DeleteFileBody { file: string; } +interface DownloadFileBody { + /** @example ["แฟ้ม 1", "แฟ้ม 2", "แฟ้ม 3"] */ + path: string[]; + /** @example "ไฟล์ 1 แก้ไข.xlsx" */ + file: string; +} + async function listFolder(path: string[]) { const list = await new Promise<{ pathname: string; name: string }[]>((resolve, reject) => { const item: { pathname: string; name: string }[] = []; @@ -601,7 +608,7 @@ export class StorageController extends Controller { @Security("bearerAuth", ["management-role", "admin"]) @SuccessResponse(HttpStatusCode.NO_CONTENT, "สำเร็จ") public async deleteFile(@Body() body: DeleteFileBody) { - const pathname = body.path.join("/") + body.file; + const pathname = body.path.join("/") + `/${body.file}`; await minioClient .removeObject(DEFAULT_BUCKET, pathname) @@ -617,4 +624,30 @@ export class StorageController extends Controller { return this.setStatus(HttpStatusCode.NO_CONTENT); } + + @Post("file/download") + @Tags("Download") + @Security("bearerAuth", ["management-role", "admin"]) + @SuccessResponse(HttpStatusCode.OK, "สำเร็จ") + public async downloadFile(@Body() body: DownloadFileBody) { + const pathname = body.path.join("/") + `/${body.file}`; + + const search = await esClient.search }>({ + index: DEFAULT_INDEX!, + query: { + match: { pathname }, + }, + }); + + if (search && search.hits.hits.length === 0) { + throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบไฟล์"); + } + + const { attachment, ...rest } = search.hits.hits[0]._source!; + + return { + ...rest, + downloadUrl: await minioClient.presignedGetObject(DEFAULT_BUCKET, pathname), + }; + } } From a2067c527823bd2dfe8477ec0fefe136081bb7f2 Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Thu, 14 Dec 2023 10:40:39 +0700 Subject: [PATCH 2/2] chore: comment --- Services/server/src/controllers/storageController.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Services/server/src/controllers/storageController.ts b/Services/server/src/controllers/storageController.ts index 17ea543..15fb998 100644 --- a/Services/server/src/controllers/storageController.ts +++ b/Services/server/src/controllers/storageController.ts @@ -370,7 +370,7 @@ export class StorageController extends Controller { } /** - * ลบ Folder หรือ File ออกจากระบบ + * ลบ Folder ออกจากระบบ */ @Delete("folder") @Tags("Storage Folder") @@ -461,8 +461,6 @@ export class StorageController extends Controller { const presignedUrl = await minioClient.presignedPutObject(DEFAULT_BUCKET, metadata.pathname); - console.log(presignedUrl); - return { ...metadata, uploadUrl: presignedUrl }; } @@ -603,6 +601,9 @@ export class StorageController extends Controller { return this.setStatus(HttpStatusCode.NO_CONTENT); } + /** + * ลบ File ออกจากระบบ + */ @Delete("file") @Tags("Storage File") @Security("bearerAuth", ["management-role", "admin"])