목차

반응형

1. 개요

2. 사용하는 라이브러리, 개념 설명

3. 코드

4. 그 외

 

 

 

1. 개요

이전 게시물에서는 파일을 업로드 하는 경우에 대해서 다뤘는데 이번에는 다운로드하여 저장하는 부분을 살펴보도록 하겠다.

마찬가지로 axios를 통해서 처리한다.

 

2. 사용하는 라이브러리, 개념 설명

사용하는 라이브러리

axios 네트워크 통신

filesystem 파일에 대하여 관리할 수 있도록 도와주는 라이브러리 이미 fs로 쓰고 있을 가능성이 높음.

 

마찬가지로 코드로 넘어가기 전에 간단히 어떤 플로우를 통하여 업로드 하는지 알아보자.

업로드보다 조금 더 쉽다.

 

1. axios에서 원하는 파일 데이터를 stream 형태로 요청

2. 결과값을 writestream으로 저장

 

3. 코드

//1. axios에서 원하는 파일 데이터를 stream 형태로 요청
AxiosNetworkHelper.GetRequest({
    url: 'https://targetsite.com/image.jpg',
    responseType: 'stream',
}).then((res) => {
	//폴더 recursive로 생성 요청
    if (!fileSystem.existsSync(`./images/savefolder`))
        fileSystem.mkdirSync(`./images/savefolder`,{recursive: true})
        
 	//파일 이름 확장자명 따라서 정해주기
    let fileName = `filename.${res.headers['content-type'].split('/')[1]}`

	//2. 결과값을 writestream으로 저장
    const writer = fileSystem.createWriteStream(`./images/savefolder/${fileName }`);
    res.pipe(writer)

    writer.on('error', (error) => {console.log(`이미지 다운로드 스트림 생성 실패 ${error}`)})
    writer.on('close', () => {console.log('이미지 다운로드 성공')})
}).catch(error => {LogManager.getInstance().AddLocalLogData(forkHistoryId, `이미지 다운로드 요청 실패 ${error}`)})

 

마찬가지로 내용이 쉽기 때문에 자세한 설명은 생략하도록 하겠다.

다만 파일 확장자를 따로 정해주는 부분은 이해가 안갈수도 있는데

해당 res.headers 부분을 찍어보면 아래와 같이 나온다.

 

확장자 정보는 url을 통해서 이미 알고 있는데 왜 다시 정보를 이런식을 받아오냐 묻는다면... 가끔 확장자 정보가 없는 경우가 있다. 그런 경우 위와 같이 확장자를 그때그때 받아와서 저장하는 것 이다.

 

4. 그 외

마찬가지로 현재 게시물의 예제는 단일 이미지 다운로드에 대한 예제다.

다음에는 여러개의 이미지를 동시에 다운로드 하는 예제를 올리려고 한다.

 

nodejs axios readstream 파일 업로드

nodejs axios writestream 파일 다운로드

 

반응형