2

ファイルを FTP サーバーにアップロードするアプリケーションを作成しています。

コードは次のとおりです。

    try:
        f = open(filename,"rb")
    except:
        print "error 0"
    try:
        ftp = FTP(str(self.ConfigUri))
        print "CONNECTED!"
    except:
        print "CANNOT CONNECT"
    try:
        ftp = FTP(str(self.ConfigUri))   # connect to host, default port
    except:
        print "error 1"
    try:
        ftp.login()               # user anonymous, passwd anonymous@
    except:
        print "error2"
    try:
        ftp.storbinary('STOR ' + filename, f)
    except:
        print "error 3"
    try:
        ftp.quit()
    except:
        print "error 4"

ftp.storbinary('STOR' + filename, f) でエラーが発生します。理由はありますか?

4

3 に答える 3

1

ファイル名がフル パスである可能性があります。代わりにベース名を使用する必要があります。

import os
folder, base = os.path.split(filename)
ftp.storbinary('STOR ' + base, f)

そうでない場合は、Python が適切な場所で実行されていることを確認してください。

import os
print os.getcwd()
于 2010-10-19T18:07:07.910 に答える
0

次のコードが報告するエラーは何ですか?

try:
    with open(filename,"rb") as f:
        ftp = FTP(str(self.ConfigUri))   # connect to host, default port
        ftp.login()               # user anonymous, passwd anonymous@
        ftp.storbinary('STOR ' + filename, f)
        ftp.quit()
except Exception, e:
    print e

編集: Error 550?アクセス拒否エラーのように見えます...匿名ユーザーはそのFTPディレクトリに書き込む権利を持っていますか?

于 2010-10-19T18:12:11.393 に答える
0

ファイルを開くためにフル パスを渡していて、同じフル パスを使用して ftplib のファイルに名前を付けているようです。代わりに、cdそのディレクトリに移動し、ファイル名だけでファイルに名前を付けます。

@eumiro のコードを盗む:

from ftplib import FTP
import os.path

try:
    with open(fullpath,"rb") as f:
        directory, filename = os.path.split(fullpath)
        ftp = FTP(str(self.ConfigUri))   # connect to host, default port
        ftp.login()               # user anonymous, passwd anonymous@
        ftp.cwd(directory)
        ftp.storbinary('STOR ' + filename, f)
        ftp.quit()
except Exception, e:
    print e

ディレクトリがサーバー上にない場合は、次のように作成できます。

ftp.mkd(directory)

または、ftp.cwd() 呼び出しを省略して、ファイルを ftp ルートに配置することもできます。

于 2010-10-19T18:21:47.937 に答える