pythonのFTPで複数の画像ファイルをアップロードする方法
Pythonのドキュメントやググって出てきた記事を参考に書いてます。 ローカルでPythonと同一ディレクトリ内のファイルをホスト側で/images/というディレクトリにアップロードする方法は以下。
クソ汚いコード
# coding: utf-8 from ftplib import FTP ftp = FTP("xxx.xxx.xxx") #ホスト名 ftp.set_pasv("true") ftp.login("user", "password") #ログインIDとパス fp = open("abcd.jpg", "rb") #アップロードするファイル名 ftp.storbinary("STOR /images/abcd.jpg",fp) #ホスト側のディレクトリ ftp.close() fp.close()
注意点1
画像をアップする際は fp = open("abcd.jpg", "rb") が fp = open("abcd.jpg", "r") じゃダメ。送ることは出来るけどファイルが壊れてしまいます。
FFFTPなどではバイナリモード、テキストモードを送るファイルによって自動で振り分けてくれるけど自分でやらないといけない。ここに躓いてしまってスラダンのみっちーばりに無駄な時間を過ごしてしまったことは秘密だぞ☆
このコードだと単一ファイルしか送れないので複数ファイルにも挑戦してみました。一番最後の参考URL先にあるコードをパク…いや、大いに参考にさせていただいた。先人達に感謝です。
複数ファイルアップロードする場合
# coding: utf-8 import glob import string import os from ftplib import FTP from urllib import urlopen filelist=glob.glob('*.jpg') print filelist ftp=FTP('xxx.xxx.xxx') ftp.set_pasv("true") ftp.login('user','password') ftp.cwd('/images/') #ホスト側のディレクトリ for file in filelist: f=open(file,'rb') filename=os.path.basename(file) cmd='STOR '+filename print cmd ftp.storbinary(cmd,f) f.close() ftp.quit()
注意点2
pythonと同一フォルダ内にあるjpgファイルをアップロードしてくれます。ftp=FTP以下のコードを繰り返し書いてホスト名などを変更すれば、複数の画像ファイルを複数のサーバーにアップロードだって出来ます。仕事柄複数のファイルを複数の場所にコピーする必要がありましたので自分で書いた次第です。
参考記事
http://docs.python.jp/2/library/ftplib.html http://lightson.dip.jp/blog/seko/1341