GitHub - lmk/SftpDownloader: sftp downloader

SFTP 서버에서 파일을 다운로드하는 웹 기반 GUI 애플리케이션입니다. 원격 서버의 디렉토리 구조를 유지하면서 여러 파일을 동시에 다운로드할 수 있습니다.

주요 기능

  • 🌐 웹 기반 GUI: 브라우저를 통한 직관적인 사용자 인터페이스
  • 동시 다운로드: 여러 SFTP 세션을 사용한 병렬 다운로드 지원
  • 📁 경로 유지: 원격 서버의 디렉토리 구조를 로컬에 그대로 유지
  • 🔄 실시간 진행 상황: 다운로드 진행률을 실시간으로 확인
  • 중복 파일 감지: 동일한 파일의 중복 다운로드 방지
  • 📝 파일 목록 관리: 파일 목록을 저장하고 재사용 가능
  • ⚙️ 설정 저장: SFTP 연결 정보를 설정 파일에 저장

요구사항

  • Go 1.21.6 이상
  • Windows, Linux, macOS 지원

설치

소스에서 빌드

  1. 저장소 클론:
git clone <repository-url>
cd SftpDownloader
  1. 의존성 설치:
  1. 빌드:
    • Windows: make.bat 실행
    • Linux/macOS: make.sh 실행

빌드된 실행 파일은 프로젝트 루트 디렉토리에 생성됩니다.

사용 방법

1. 애플리케이션 실행

실행 파일을 실행하면:

  • 자동으로 웹 서버가 시작됩니다 (포트 8888)
  • 기본 웹 브라우저가 자동으로 열립니다
  • http://localhost:8888에서 웹 인터페이스에 접근할 수 있습니다

2. SFTP 서버 설정

웹 인터페이스에서 다음 정보를 입력합니다:

  • IP Address: SFTP 서버 주소
  • Port: SFTP 포트 (기본값: 22)
  • ID: SFTP 사용자 ID
  • Password: SFTP 비밀번호
  • Local Directory: 파일을 다운로드할 로컬 디렉토리 경로

3. 다운로드할 파일 목록 입력

"File List" 텍스트 영역에 다운로드할 원격 파일 경로를 한 줄에 하나씩 입력합니다:

/home/user/documents/file1.txt
/home/user/documents/file2.txt
/home/user/images/photo.jpg

주석은 #으로 시작하는 줄을 사용할 수 있습니다.

4. 다운로드 시작

"Download" 버튼을 클릭하면 다운로드가 시작됩니다. 다운로드 진행 상황은 실시간으로 업데이트됩니다.

설정 파일

default.yaml

SFTP 연결 정보가 저장되는 설정 파일입니다:

sftp.ip: 10.1.14.186
sftp.port: 22
sftp.id: username
sftp.password: password
local.directory: C:\Users\Username\Downloads
sftp.session-count: 10
sftp.over-write: true

설정 항목:

  • sftp.ip: SFTP 서버 IP 주소
  • sftp.port: SFTP 포트 번호 (기본값: 22)
  • sftp.id: SFTP 사용자 ID
  • sftp.password: SFTP 비밀번호
  • local.directory: 로컬 다운로드 디렉토리
  • sftp.session-count: 동시 다운로드 세션 수 (기본값: 10)
  • sftp.over-write: 기존 파일 덮어쓰기 여부 (true/false)

files.lst

다운로드할 파일 목록이 저장되는 파일입니다. 각 줄에 하나의 원격 파일 경로를 입력합니다.

프로젝트 구조

SftpDownloader/
├── main.go              # 메인 진입점 및 HTTP 서버
├── SftpDown.go          # SFTP 다운로드 로직
├── SftpSession.go       # SFTP 세션 관리
├── DownInfo.go          # 다운로드 정보 및 설정 관리
├── FileInfo.go          # 파일 정보 구조체
├── DownStat.go          # 다운로드 상태 구조체
├── Path.go              # 경로 처리 유틸리티
├── html.go              # 웹 UI HTML 템플릿
├── Version.go           # 버전 정보
├── default.yaml         # 기본 설정 파일
├── files.lst            # 파일 목록
├── go.mod               # Go 모듈 정의
├── go.sum               # 의존성 체크섬
├── make.bat             # Windows 빌드 스크립트
└── make.sh              # Linux/macOS 빌드 스크립트

주요 기능 설명

동시 다운로드

여러 SFTP 세션을 사용하여 파일을 병렬로 다운로드합니다. sftp.session-count 설정으로 동시 세션 수를 조절할 수 있습니다.

경로 유지

원격 파일의 디렉토리 구조를 분석하여 공통 경로를 찾고, 로컬 디렉토리에 상대 경로를 유지하면서 다운로드합니다.

예를 들어:

  • 원격 파일: /home/user/docs/file1.txt, /home/user/docs/file2.txt
  • 로컬 디렉토리: C:\Downloads
  • 다운로드 결과: C:\Downloads\docs\file1.txt, C:\Downloads\docs\file2.txt

중복 파일 감지

동일한 경로의 파일이 목록에 여러 번 포함된 경우 중복으로 표시하고 다운로드하지 않습니다.

파일 존재 확인

다운로드 전에:

  1. 원격 서버에서 파일 존재 여부 확인
  2. 로컬에 이미 동일한 크기의 파일이 있는지 확인
  3. sftp.over-writefalse인 경우 기존 파일은 건너뜀

API 엔드포인트

  • GET /: 메인 설정 페이지
  • POST /download: 다운로드 시작
  • POST /downloading: 다운로드 상태 조회 (JSON)

의존성

  • github.com/pkg/sftp v1.13.6: SFTP 클라이언트
  • golang.org/x/crypto v0.19.0: SSH 암호화
  • gopkg.in/yaml.v3 v3.0.1: YAML 설정 파일 파싱

빌드 옵션

빌드 시 다음 변수를 설정할 수 있습니다:

  • VERSION: 애플리케이션 버전
  • BUILDDT: 빌드 날짜/시간

빌드 스크립트는 Git 정보를 자동으로 포함합니다.

문제 해결

연결 실패

  • SFTP 서버 주소와 포트가 올바른지 확인
  • 방화벽 설정 확인
  • 사용자 ID와 비밀번호 확인

파일을 찾을 수 없음

  • 원격 파일 경로가 정확한지 확인
  • SFTP 서버에서 파일 접근 권한 확인

다운로드 속도가 느림

  • sftp.session-count 값을 증가시켜 동시 세션 수를 늘림
  • 네트워크 연결 상태 확인

라이선스

이 프로젝트의 라이선스 정보는 저장소를 확인하세요.

기여

버그 리포트나 기능 제안은 이슈로 등록해 주세요.