노드 서버용 메모리 내 파일 생성
12822 단어 tutorialtypescriptnode
사용 사례
해결책
일반적인 생각
예
QR 코드가 포함된 PDF 생성
PDF 및 QR 코드 라이브러리 설치
npm i qrcode && npm i --save-dev @types/qrcode
npm i pdf-lib
데이터 URI로 QR 코드 생성
export const generateDataUri = (content: string): Promise<string> => {
return QRCode.toDataURL(content);
};
PNG로 QR 코드 생성 및 포함
const pdfDoc = await PDFDocument.create();
const page = pdfDoc.addPage();
const qrCodeDataUri = await generateDataUri(name);
const pngImage = await pdfDoc.embedPng(qrCodeDataUri);
page.drawImage(pngImage, {
x: page.getWidth() / 2 - pngImage.width / 2,
y: (page.getHeight() - pngImage.height) / 2,
width: pngImage.width,
height: pngImage.height,
});
PDF를 버퍼로 반환
const pdfBytes = await pdfDoc.save();
return {
contentBytes: Buffer.from(pdfBytes),
filename
};
응답을 파일로 구성
const respondWithAttachingFile = (
contentBytes: Buffer,
res: Response,
filename: string,
filetype: string
): void => {
res.setHeader("Content-Type", `application/${filetype}`);
res.setHeader("Content-Disposition", `attachment; filename=${filename}`);
res.status(200).end(contentBytes);
};
respondWithAttachingFile(contentBytes, res, filename, "pdf");
여러 PDF의 아카이브 생성
아카이브 및 스트림 버퍼 라이브러리 설치
npm i archiver && npm i --save-dev @types/archiver
npm i stream-buffer && npm i --save-dev @types/stream-buffer
파일 버퍼를 아카이브 파일로 파이프
export const archiveFiles =
async (fileBuffers: FileBuffer[], outputFilename: string): Promise<FileBuffer> => {
const archive = archiver("zip", {
zlib: { level: 9 },
});
const filename =
`${outputFilename}.zip`
.replace(/ /g, "");
const outputStreamBuffer = new streamBuffers.WritableStreamBuffer({
initialSize: (1000 * 1024),
incrementAmount: (1000 * 1024)
});
archive.pipe(outputStreamBuffer);
fileBuffers.forEach(fileBuffer =>
archive.append(Buffer.from(fileBuffer.contentBytes), { name: fileBuffer.filename }));
await archive.finalize();
outputStreamBuffer.end();
return new Promise((resolve, reject) => {
const contentBytes = outputStreamBuffer.getContents();
if (contentBytes !== false) {
resolve({ filename, contentBytes });
}
reject(new Error("Buffering failed."));
});
};
응답을 파일로 구성
respondWithAttachingFile(contentBytes, res, filename, "zip");
전체 솔루션을 찾을 수 있습니다. https://github.com/angiesasmita/generate-file-in-memory
파일을 저장할 수 없는 몇 가지 이유(중간 단계로)
고려 사항
Reference
이 문제에 관하여(노드 서버용 메모리 내 파일 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/angiesasmita/in-memory-file-generation-for-node-server-60f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)