33 lines
997 B
TypeScript
33 lines
997 B
TypeScript
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<INode>
|
|
) {}
|
|
|
|
async downloadFile(id: number, user: User): Promise<StreamableFile> {
|
|
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
|
|
});
|
|
}
|
|
}
|