노드전도사
369
2021-01-12 16:27:23 작성 2021-01-12 16:28:49 수정됨
0
146

ssh2-sftp-client 원격 서버에서 클라이언트로 파일 다운로드


안녕하세요.


현재 원격서버, 웹 서버로 구성된 환경에서 클라이언트가 HTML을 통해 요청하면 원격서버에 있는 파일을 웹 서버를 통하지 않고 바로 다운로드 할 수 있게 하고싶습니다.


파일 다운로드는 구현하기는 했는데 왠만한 소스는 웹 서버를 통해서만 다운로드를 한 후에 데이터를 전송 할 수 있는 것 같더라고요.


이전 FTP 모듈로 작업할때는 스트림으로 바로 res에 파이프쏘면 됐던 작업인데 ssh2-sftp-client는 스트림이 아닌 버퍼 형식에다가 스트림화 시켜서 보내려해도 파이프가 작동되지 않거나 웹 서버에 파일이 저장되는 과정을 거쳐서 문제입니다.


그래서 바로 원격서버 -> 클라이언트로 파일을 쏘는 중재자 역할만 하는 소스코드를 구성하는데 스택 오버플로우에도 나와있는 방법은 전부 오류가 나더군요.

...
//try 1: 경로 오류발생
sftpClient.get(sftpDownloadFilePath).then((data) => {
	res.download(data, "다운로드.txt");
});

...
//try 1-1: 정상 작동하지만 웹 서버에 "download.txt" 파일이 저장됩니다.
sftpClient.get(sftpDownloadFilePath, "download.txt").then((data) => {
	res.download(data, "다운로드.txt");
});
...
//try 2: data.pipe is not function 에러 발생. data가 스트림 타입이 아닌 버퍼 타입이라 발생하는 오류. https://stackoverflow.com/questions/53372086/node-express-file-not-downloading-using-fs-pipe 링크에서 해당 방법으로 해결된 코드이지만 작동되지 않습니다.
sftpClient.get(sftpDownloadFilePath).then((data) => {
	data.pipe(fs.createWriteStream(res));
});


웹 서버에 파일을 저장하지 않고 전송하는 별도의 방법이 있을까요?


FTP모듈에 대해 사소한 문제가 많아서 sftp로 교체중인데 다른 부분와 업로드는 전부 교체됐지만 다운로드에서 골머리 앓고있네요.

0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.