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

看起来您正在传递一个完整路径来打开文件,并且您正在使用相同的完整路径为 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 回答
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 回答