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