如何在python中使用FTPlib

时间:2010-10-19 18:02:53

标签: python ftplib

我正在编写一个应该将文件上传到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)。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

可能是文件名是完整路径,您应该使用基本名称:

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

如果没有确保你的python在正确的位置运行:

import os
print os.getcwd()

答案 1 :(得分: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目录?

答案 2 :(得分: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 root中。