引用テキスト### 前提・実現したいこと
Python でFTPにファイルを自動アップロードするスクリプトを作成したいというのが、実現したい内容です。
FTPサイトは複数あり、正常にアップロード処理できたサイトがあります。
一方、その中の一つのサイトは、人間が操作するときはFileZillaを使用しており、確認するとFTP over TLSを使用するサイトです。
発生している問題・エラーメッセージ
実行をすると、
ftplib.error_perm: 550 SSL/TLS required on the data channel
となります。
ちなみに、下記のコードはFTPの接続は成功しています。
ftps.mkd('/images')
は正常に認識するようで、imagesディレクトリは、TLSのサイトに作成されています。
ftps.storbinary(cmd, f) の部分でエラーが発生しているようで、作成されたディレクトリにファイルはあがっていません。
該当のソースコード
python
1#!/usr/bin/env python 2# -*- coding: utf8 -*- 3import os 4import shutil 5import re 6import zipfile 7import ftplib 8import glob 9 10from ftplib import FTP_TLS 11 12 # 接続先サーバーのホスト名 13 ftps = FTP_TLS("TLSのFTPサイトのホスト") 14 ftps.set_pasv("true") 15 # ユーザ名とパスワードを指定しログイン 16 ftps.login("アカウント", "パスワード") 17 18 ftps.mkd('/images') 19 ftps.cwd('/images') # ホスト側のディレクトリ 20 21 #ローカルPCの送り出しフォルダのファイル一覧 22 wodir2 += u'images\' 23 wodir2 += u'*.*' 24 filelist = glob.glob(wodir2) 25 26 for file in filelist: 27 f=open(file,'rb') 28 filename = os.path.basename(file) 29 cmd = 'STOR %s' % filename 30 ftps.storbinary(cmd, f) 31 f.close() 32 33 34 # 終了処理 35 ftps.close() 36
試したこと
ftp = ftplib.FTP("TLSではないFTPサイトのホスト") ftp.set_pasv("true") ftp.login(""アカウント", "パスワード") ftps.mkd('/images') ftps.cwd('/images') # ホスト側のディレクトリ wodir2 += u'images\' wodir2 += u'*.*' filelist = glob.glob(wodir2) for file in filelist: f=open(file,'rb') filename = os.path.basename(file) cmd = 'STOR ' + filename ftp.storbinary(cmd, f) f.close() ftp.close()
TLSではないFTPサイトでは、上記コードでホストにディレクトリが作成され、目的フォルダ内のファイルがそのディレクトリにアップロードされます。
https://docs.python.jp/3/library/ftplib.html
などを見ると、FTP_TLS()でサイトを宣言すれば、そのままFTP()での宣言と同様に使えるように読めるのですが、なにか違うのでしょうか?
FTP_TLSを使用する場合で間違っている点などありましたら、ご教示いただけると助かります。
コードの作成は
JetBrains PyCharm Community Edition 2017.3.3
で行いました。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。