برنامه نویسی
استریم فایل های باینری و 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);
}
}