파이썬 실습/FTP(파일전송)프로그램 만들기

파이썬 FTP(파일전송) 프로그램 만들기 - 4. 업로드 기능

파기차차 2022. 11. 18. 07:04
728x90
반응형
SMALL
728x90
ㅁ 개요

 

O 프로그램 소개
 

 

 - 이번 프로그램은 이전글(2022.11.13 - [파이썬 실습/FTP(파일전송)프로그램 만들기] - 파이썬 FTP(파일전송) 프로그램 만들기 - 3. 다운로드 기능)에 이은 4번째 글로 FTP서버에서 파일을 업로드 하는 기능들을 설명합니다.

(본 블로그의 내용은 유튜브 동영상(

파이썬 FTP(파일전송) 프로그램 만들기-4.업로드편(FTP program by Python-4.Upload-1.intro)

파이썬 FTP(파일전송) 프로그램 만들기-4.업로드편 (FTP program by Python-4.Upload-2.one file)

파이썬 FTP(파일전송) 프로그램 만들기-4.업로드편(FTP program by Python-4.Upload-3.Directory+atOnce)

)에서 더욱 자세히 보실 수 있습니다.)

 

 

 

 

O 완성된 프로그램 실행 화면
 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

 

(1) 내PC의 파일을 서버쪽 디렉토리로 업로드 합니다.

아래와 같이 서버쪽 디렉토리에는 현재 아무것도 없습니다.

 

 

 

 

 

(2) 내 PC의 다운로드 폴더에 있는 2개 파일(cc.txt, dd.txt)을 업로드 하겠습니다.

 

 

 

 

 

 

(3) 프로그램을 실행시키면 서버에 연결 후 정상적으로 파일 2개를 업로드 한것을 확인할 수 있습니다.

 

 

 

 

 

 

(4) 서버쪽 디렉토리 확인 결과 위에서 업로드한 파일 2개(cc.txt, dd.txt)가 정상적으로 생겼습니다.

 

 

 

 

 

 


 

O 사전 준비 사항

 

 

 - 이번 게시글의 내용은 이전글(2022.11.13 - [파이썬 실습/FTP(파일전송)프로그램 만들기] - 파이썬 FTP(파일전송) 프로그램 만들기 - 2. 기본기능)의 내용을 완료하셔야 정상적인 수행이 가능합니다.

 

반드시 그런 것은 아니지만, 가급적 이전글을 학습하시길 추천 드립니다.

 

 


 

ㅁ 세부 내용
 
O 완성된 소스

 

소스1 : 기본 디렉토리로 파일 1개 업로드

import ftplib

HOST = "192.168.244.112"
PORT = 2221
ID = 'admin'
PW = 'admin1234'


# create a new FTP() instance
f = ftplib.FTP()

f.set_debuglevel(1)

# connect to our FTP site
f.connect(HOST,PORT)

# log into the FTP site
f.login(ID, PW)


entries = f.nlst() # 디렉토리 목록을 보여줌
print(entries)
dir = f.dir() # 파일목록을 보여줌
print(dir)


# result.txt 파일을 FTP 서버에 업로드한다.
with open('cc.txt', 'rb') as read_f:
    f.storlines("STOR cc.txt", read_f)

f.quit()

 

 

소스2 : 내PC의 특정 경로에 있는 파일을 서버의 지정된 대렉토리로 업로드

import ftplib
import os

HOST = "192.168.244.112"
PORT = 2221
ID = 'admin'
PW = 'admin1234'

# create a new FTP() instance
f = ftplib.FTP()

f.set_debuglevel(1)

# connect to our FTP site
f.connect(HOST,PORT)

# log into the FTP site
f.login(ID, PW)


entries = f.nlst() # 디렉토리 목록을 보여줌
print(entries)
dir = f.dir() # 파일목록을 보여줌
print(dir)


f.cwd('/Download/Telegram') # 업로드 하고자 하는 서버측 경로로 이동


# 로컬 PC에서 파일을 보낼 폴더 경로
localpath = "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/"



# 서버의 파일을 "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/" 아래에 받겠다
local_filename = os.path.join(localpath, 'cc.txt')
with open(local_filename, 'rb') as read_f:
    f.storlines("STOR cc.txt", read_f)


f.quit()

 

 

 

 

 

소스3 : 지정된 서버의 특정 디렉토리로 내 PC 디렉토리에 있는 모든 파일 업로드 하기

import ftplib
import os

HOST = "192.168.244.112"
PORT = 2221
ID = 'admin'
PW = 'admin1234'

# create a new FTP() instance
f = ftplib.FTP()

f.set_debuglevel(1)

# connect to our FTP site
f.connect(HOST,PORT)

# log into the FTP site
f.login(ID, PW)

f.cwd('/Download/Telegram') # 업로드 하고자 하는 서버측 경로로 이동
print("================++++++++++++++++++++++")

entries = f.nlst() # 서버 디렉토리 목록을 보여줌
print(entries)
dir = f.dir() # 파일목록을 보여줌
print(dir)


# 로컬 PC의 저장 경로
localpath = "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/"


files = os.listdir(localpath)
print(files)
os.chdir(localpath) # 로컬 PC의 경로를 "D:/100-1 Study/710_Wikidocs/210_wikiDocsAutoBitcoin/620_유튜버&블로그/20221113_파이썬ftp클라이언트만들기/download/" 이곳으로 변경


for filename in files:
    print(filename)
    local_filename = os.path.join(localpath, filename)
    with open(local_filename, 'rb') as read_f:
        # f.storlines("STOR "+filename, read_f)
        f.storbinary('STOR '+filename, read_f)

    read_f.close

f.quit()

 

 

 

 

 

O 소스 다운로드 및 실행
 
 - 소스파일 다운로드 후 cmd 또는 파워쉘 등에서 아래와 같이 실행해 보시기 바랍니다.
 > python 3.upload.py
 
 
 > python 3.upload2.py
 
 
 > python 3.upload3.py

 

 


 
 
O 소스 분석

 

 

1.f = ftplib.FTP() <-- FTP 객체 생성

1.f.set_debuglevel(1) <-- 로깅을 기능을 활성화
2.f.connect(HOST,PORT) <-- 서버에 연결(포트 변경시 별도 지정)
3.f.login(ID, PW) <-- 서버에 로그인
4.entries = f.nlst() <-- 서버의 디렉토리 목록을 리스트로 반환
5.dir = f.dir() <-- 서버의 디렉토리 목록을 단순 조회

6.f.cwd('/Download/Telegram') <-- 받고자 하는 파일의 서버측 경로로 이동
7.local_filename = os.path.join(localpath, 'cc.txt') <-- 내PC의 지정된(localpath) 파일을 서버 특정한 장소(/Download/Telegram)로 업로드
8.with open(local_filename, 'rb') as read_f: <-- 파일을 'rb' 모드로 읽어서
9.f.storlines("STOR cc.txt", read_f) <--서버에 저장(텍스트 파일은 storlines()함수를 사용해도 됨)


   f.login(ID, PW)
10.f.cwd('/Download/Telegram') <-- for 루프를 돌릴때는 f.login(ID,PW) 코드 아래에 이 코드를 위치시켜야함

11.files = os.listdir(localpath) <-- 로컬 PC의 지정한 디렉토리의 모든 파일을 받기 위해 o.listdir()함수 사용
12.os.chdir(localpath) <-- 로컬 PC의 경로를 지정한 곳으로 변경
13.local_filename = os.path.join(localpath, filename) <-- 업로드할 파일의 로컬 전체경로(경로+파일네임)를 만들고,
14.with open(local_filename, 'rb') as read_f: <-- 로컬PC의 파일을 읽기 모드로 열어서
15.f.storbinary('STOR '+filename, read_f) <-- 서버에 하나씩 저장

 

 


 

O 주요 내용

 

 

 

소스1 : 기본 디렉토리로 파일 1개 업로드

 

 

 - 현재 서버 루트(/) 디렉토리에는 cc.txt 파일이 없는 것을 확인합니다.

 

 

 

 

- 프로그램 실행 후 정상적으로 서버에 업로드 되었습니다.

기본적으로 업로되는 파일의 위치는 디폴트 경로인 '/' 입니다.

 

 

 

 

- 파일질라를 사용하여 서버에 로그인 후 업로드된 파일을 확인해 보니 '/' 경로에 'cc.txt'파일이 잘 업로드 된 것을 볼 수 있습니다.

 

 

 

 


소스2 : 내PC의 특정 경로에 있는 파일을 서버의 지정된 대렉토리로 업로드

 

 - 이번에는 루트(/)가 아닌 내가 지정한 경로에 파일을 업로드 해 보겠습니다.

 - 아래와 같이 서버측 경로 변경을 하려면 f.cwd('/Download/Telegram')와 같이 해주시면 되고,

 - 로컬의 지정된 디렉토리에서 파일을 업로드 하려면 local_filename = os.path.join(localpath, 'cc.txt') 와 같이 풀경로를 지정해 주시면 되겠습니다.

 

 - 내 PC의 지정된 경로에 업로드할 2개의 파일이 있음을 확인합니다.

 

 

 

 

- 그리고 서버쪽 업로드할 디렉토리에는 아무 파일도 없음을 확인합니다.

 

 

 

 

- 프로그램을 실행시키면 정사적으로 파일이 업로드 되었습니다.

 

 

 

- 서버쪽 디렉토리로 가성 확인하니, 아무것도 없었는데, 파일(cc.tx) 업로드 되었습니다.

 

 

 



소스3 : 지정된 서버의 특정 디렉토리로 내 PC 디렉토리에 있는 모든 파일 업로드 하기

 

 - 이번에는 내 로컬PC의 특정 디렉토리의 모든 파일을 한꺼번에 서버의 지정된 디렉토리로 업로드하는 방법을 알아보겠습니다.

 

- 다른 것은 소스2와 동일하고, files = os.listdir(localpath) <-- 와 같이 로컬의 파일을 업로드할 것이므로 로컬패스의 파일목록을 files변수에 담아둔 다음, os.chdir(localpath) <-- 와 같이 로컬의 경로를 해당 경로로 이동해야 합니다.

 

 - 마찬가지로 서버의 지정된 경로에는 현재 아무것도 없습니다.

 

 

 

 

- 내 로컬 경로에는 2개 파일이 존재함을 확인합니다.

 

 

 

 

- 프로그램을 실행하면 정상적으로 2개의 파일이 업로드 되었습니다.

 

 

 

 

- 서버에서 확인한 결과 지정된 디렉토리에 2개파일이 업로드 되어 있습니다.

 

 

 

 

 

 

 


 

ㅁ 정리
 
O 우리가 배운 내용
 
 - 오늘은 FTP서버 프로그램의 업로드 기능을 만들어 세부적으로 나누어 살펴 보았습니다.
 
 
 - 오늘 우리가 배운 내용을 간단히 정리해 보면 아래와 같습니다.
 
 > 1. 서버측 기본 디렉토리('/')로 파일 1개 업로드
 > 2. 내PC의 특정 경로에 있는 파일을 서버의 지정된 대렉토리로 업로드
 > 3. 서버의 지정된 특정 디렉토리로 내 PC 디렉토리에 있는 모든 파일 업로드
 
 

다음 시간에는 지금껏 만든 기능들을 조합하여 실제 GUI/윈도우 FTP클라이언트 프로그램을 만들어 보겠습니다.

 

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

728x90
반응형
LIST