All files / apps/file-download/src/app/downloads downloads.controller.ts

100% Statements 31/31
37.5% Branches 3/8
100% Functions 2/2
100% Lines 31/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 321x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 1x 1x 1x 7x 2x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 1x  
import { Controller, Get, Inject, Query, Res } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { Response } from 'express';
 
import { DownloadsService } from './downloads.service';
 
@ApiTags('downloads')
@Controller('downloads')
export class DownloadsController {
  public constructor(
    @Inject(DownloadsService)
    private readonly downloadsService: DownloadsService,
  ) {}
 
  @Get()
  public async downloadFile(@Query('token') token: string, @Res() response: Response) {
    const { stream, filenameWithoutExtension, extension, contentType } = await this.downloadsService.streamFile(token);
 
    const filename = `${filenameWithoutExtension || 'export'}.${extension}`;
 
    response.set({
      'Content-Type': contentType,
      'Content-Disposition': `attachment; filename=${filename}`,
      'X-filename': filenameWithoutExtension || 'export',
      'X-extension': extension,
      'Access-Control-Expose-Headers': 'X-filename,X-extension',
    });
 
    stream.pipe(response);
  }
}