- 이번 프로그램은 이전글(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)
)에서 더욱 자세히 보실 수 있습니다.)
(1) 내PC의 파일을 서버쪽 디렉토리로 업로드 합니다.
아래와 같이 서버쪽 디렉토리에는 현재 아무것도 없습니다.
(2) 내 PC의 다운로드 폴더에 있는 2개 파일(cc.txt, dd.txt)을 업로드 하겠습니다.
(3) 프로그램을 실행시키면 서버에 연결 후 정상적으로 파일 2개를 업로드 한것을 확인할 수 있습니다.
(4) 서버쪽 디렉토리 확인 결과 위에서 업로드한 파일 2개(cc.txt, dd.txt)가 정상적으로 생겼습니다.
O 사전 준비 사항
- 이번 게시글의 내용은 이전글(2022.11.13 - [파이썬 실습/FTP(파일전송)프로그램 만들기] - 파이썬 FTP(파일전송) 프로그램 만들기 - 2. 기본기능)의 내용을 완료하셔야 정상적인 수행이 가능합니다.
반드시 그런 것은 아니지만, 가급적 이전글을 학습하시길 추천 드립니다.
소스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()
> python 3.upload.py
> python 3.upload2.py
> python 3.upload3.py
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) <-- 서버에 하나씩 저장
소스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개파일이 업로드 되어 있습니다.
다음 시간에는 지금껏 만든 기능들을 조합하여 실제 GUI/윈도우 FTP클라이언트 프로그램을 만들어 보겠습니다.
오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.
감사합니다.
'파이썬 실습 > FTP(파일전송)프로그램 만들기' 카테고리의 다른 글
파이썬 FTP(파일전송) 프로그램 만들기 - 3. 다운로드 기능 (2) | 2022.11.17 |
---|---|
파이썬 FTP(파일전송) 프로그램 만들기 - 2. 기본기능 (0) | 2022.11.15 |
파이썬 FTP(파일전송) 프로그램 만들기 - 1.소개편 (0) | 2022.11.14 |