node js 백만불짜리 꾸울팁 zip 파일 생성 및 다운로드 구현하기

node js 백만불짜리 꾸울팁 zip 파일 생성 및 다운로드 구현하기

오늘은 제가 5일간 전전긍긍해서 얻은 쾌거를 나누고자 합니다.

그것은 바로 node.js에서 zip 파일을 다운로드하는 로직을 구현하는 알고리즘인데요.

node.js가 자바스크립트 기반이라고 해서 만만하게 볼 것은 또 아니잖아요..ㅎ

python과 flask를 이용할 때는 아주 편합니다.

flask 모듈에 내장된 send_file을 이용하면 zip이든 csv든, responseType을 크게 신경쓰지 않아도 클라이언트에 알아서 뿌려 주니까요.

하지만 node.js는 모듈 생태계가 아주 많기에, 딱 '이거다!'라고 정형화된 방법이 없어서 로직의 가짓수가 넘쳐납니다.

이 말은 즉 경우의 수가 많기에 구글링해도 내 상황에 맞는 전례를 찾기 어렵다는 말과 같습니다.

저만의 꿀팁을 공개합니다.

node.js로 zip을 구현하는 분이라면, 이 정도의 코드 조각만 보아도 충분히 이해할 수 있으실거라 생각합니다.

도움이 되셨다면 공감과 댓글은 필수!

질문이 있다면 댓글 달아주세요.

Client-Side

import axios from "axios"; const response = await axios.post("/download/zip", {params}, {responseType: 'arraybuffer', headers: { withCredentials:true, },}); const url = window.URL.createObjectURL(new Blob([response.data], {type: "application/zip"})); const link = document.createElement('a'); link.href = url; const zipFileName = 'myZipFile.zip'; link.setAttribute('download', zipFileName); document.body.appendChild(link); link.click(); link.remove();

Server-Side

import zipdir from "zip-dir"; export const makeZip = (req, res) => { setTimeout(async () => { const buffer = await zipdir('./download/', { saveTo: './download/myPreciousZipfile.zip' }); res.send(buffer) }, 1000) }

from http://an-onymous.tistory.com/451 by ccl(A) rewrite - 2021-07-18 20:26:23