برنامه نویسی

استریم فایل های باینری و base64

هنگام کار با فایل های بزرگ در برنامه های وب، استریمینگ مفید است. به جای بارگذاری کل فایل در حافظه قبل از ارسال آن به مشتری، استریم به شما امکان می دهد آن را در تکه های کوچک ارسال کنید، کارایی حافظه را بهبود می بخشد و زمان پاسخ را کاهش می دهد.

قطعه کد زیر پخش فایل‌های PDF باینری CSV و base64 با NestJS را نشان می‌دهد. از همین رویکرد برای انواع دیگر فایل‌ها مانند فایل‌های JSON استفاده کنید.

نوع محتوا و هدر نام فایل را تنظیم کنید تا فایل ها به درستی پخش و دانلود شوند. فایل Base64 به یک بافر تبدیل شده و پس از آن پخش می شود. خواندن فایل ها از یک سیستم فایل یا با تماس های API.

import { Controller, Get, Param, Res } from '@nestjs/common';
import { Response } from 'express';
import { createReadStream } from 'fs';
import { readFile } from 'fs/promises';
import { join } from 'path';
import { Readable } from 'stream';

@Controller('templates')
export class TemplatesController {
  @Get('csv')
  getCsvTemplate(@Res() res: Response): void {
    const file = createReadStream(join(process.cwd(), 'template.csv'));

    res.set({
      'Content-Type': 'text/csv',
      'Content-Disposition': 'attachment; filename="template.csv"'
    });
    file.pipe(res);
  }

  @Get('pdf/:id')
  async getPdfTemplate(
    @Param('id') id: string,
    @Res() res: Response
  ): Promise<void> {
    const fileBase64 = await readFile(
      join(process.cwd(), 'template.pdf'),
      'base64'
    );
    // const fileBase64 = await apiCall();
    const fileBuffer = Buffer.from(fileBase64, 'base64');
    const fileStream = Readable.from(fileBuffer);

    res.set({
      'Content-Type': 'application/pdf',
      'Content-Disposition': `attachment; filename="template_${id}.pdf"`
    });
    fileStream.pipe(res);
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا