はじめに
今更ながらですが・・・
レガシーシステムを触っているときに、FTPサーバにFTPアップロードしなければいけない状況が発生したので、pythonでゴリゴリやろうと思ったときのメモです。
内容
概要
# -*- coding: utf-8 -*-
import ftplib
import logging
def ftp_upload(hostname, username, password, port, upload_src_path, upload_dst_path, timeout):
logger.info({
'action': 'ftp_upload',
'status': 'run'
})
# FTP接続/アップロード
with ftplib.FTP() as ftp:
try:
ftp.connect(host=hostname, port=port, timeout=timeout)
# パッシブモード設定
ftp.set_pasv("true")
# FTPサーバログイン
ftp.login(username, password)
with open(upload_src_path, 'rb') as fp:
ftp.storbinary(upload_dst_path, fp)
except ftplib.all_errors as e:
logger.error({
'action': 'ftp_upload',
'message': 'FTP error = %s' % e
})
logger.info({
'action': 'ftp_upload',
'status': 'success'
})
# logの設定
logger = logging.getLogger(__name__)
formatter = '%(asctime)s:%(name)s:%(levelname)s:%(message)s'
logging.basicConfig(
filename='./ftp_logger.log',
level=logging.DEBUG,
format=formatter
)
logger.setLevel(logging.INFO)
# 接続先サーバーのホスト名
hostname = "FTPサーバIP"
# アップロードするファイルパス
upload_src_path = "./test.jpg"
# アップロード先のファイルパス(STORはファイルをアップロードするためのFTPコマンドなので必要です。)
upload_dst_path = "STOR /test.jpg"
# サーバーのユーザー名
username = "それぞれのユーザ名"
# サーバーのログインパスワード
password = "それぞれのパスワード"
# FTPサーバポート
port = 21
timeout = 50
logger.info("===START FTP===")
ftp_upload(hostname, username, password, port, upload_src_path, upload_dst_path, timeout)
logger.info("===FINISH FTP===")
詳細
参考にもあるように、
を参考に作成しました。とてもわかりやすいです。ありがとうございます。
以上。
参考
・https://algorithm.joho.info/programming/python/ftp-file-upload-server/
・https://intellectual-curiosity.tokyo/2019/12/01/python%E3%81%A7ftp%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%82%92%E8%A1%8C%E3%81%86%E6%96%B9%E6%B3%95/
・https://qiita.com/__init__/items/91e5841ed53d55a7895e