컴퓨터언어/Node.js

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

bbanpro 2021. 7. 18. 20:12
728x90
반응형

 

오늘은 제가 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)
}
728x90
반응형