import { BadRequestException, Injectable, NotImplementedException, StreamableFile, UnauthorizedException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { INode, User } from 'entities'; import { Repository } from 'typeorm'; import { Multipart } from '@fastify/multipart'; import { pipeline } from 'stream/promises'; import { createReadStream, createWriteStream, statSync, unlink } from 'fs'; import { Writable } from 'stream'; @Injectable() export default class FileSystemService { constructor( @InjectRepository(INode) private inodeRepo: Repository ) {} async downloadFile(id: number, user: User): Promise { const node = await this.getNodeAndValidate(id, user); if (!node.isFile) throw new NotImplementedException(); const stats = statSync(`files/${node.id}`); return new StreamableFile(createReadStream(`files/${node.id}`), { disposition: `attachment; filename="${node.name}"`, length: stats.size }); } }