From b076fd93c3c042a54f8961ca32e2c8e340c2653e Mon Sep 17 00:00:00 2001 From: getlarge Date: Wed, 6 Nov 2024 10:31:10 +0100 Subject: [PATCH] fix(nestjs-tools-fastify-upload): handle undefined filename by generating a random one --- .../fastify-upload/src/lib/storage/stream-storage.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/fastify-upload/src/lib/storage/stream-storage.ts b/packages/fastify-upload/src/lib/storage/stream-storage.ts index 5f33be1..f964e0e 100644 --- a/packages/fastify-upload/src/lib/storage/stream-storage.ts +++ b/packages/fastify-upload/src/lib/storage/stream-storage.ts @@ -1,3 +1,4 @@ +import { randomBytes } from 'node:crypto'; import { createReadStream, createWriteStream } from 'node:fs'; import { rm } from 'node:fs/promises'; import { tmpdir } from 'node:os'; @@ -23,11 +24,13 @@ const temporaryFileOutput = (filename: string) => { export class StreamStorage extends Storage { async handleFile(file: MultipartFile): Promise { const { encoding, mimetype, fieldname } = file; + // looks like the file.filename type is incorrect, file.filename could be undefined + const filename = file.filename ?? randomBytes(16).toString('hex'); /** * force the stream to be consumed as required by Fastify and Busboy * @see https://github.com/fastify/fastify-multipart?tab=readme-ov-file#usage - * */ - const output = temporaryFileOutput(file.filename); + **/ + const output = temporaryFileOutput(filename); await pipeline(file.file, createWriteStream(output)); const stream = createReadStream(output); return Promise.resolve({ @@ -36,7 +39,7 @@ export class StreamStorage extends Storage { encoding, mimetype, fieldname, - originalFilename: file.filename, + originalFilename: filename, }); }