注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

python ftplib类库 FTP 的使用(socket.error: [Errno 10060])  

2016-10-28 12:00:57|  分类: Web技术-Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天我们使用python 的ftplib来实现一个上传文件的FTP类:

#-*-coding:utf-8 -*-
__author__ = 'fc'

from ftplib import FTP
import os

'''
使用方法
ftpconfig = {xxxx}
ftpobj = ftpclass.ftpxp(host=ftpconfig['host'],port=ftpconfig['port'],
user=ftpconfig['user'],passwd=ftpconfig['passwd'],path=ftpconfig['path'])

localpath ='/t.txt'
remotepath = '%s/fc/t.txt'%(ftpconfig['path'])
ftpobj.put(localpath,remotepath)
'''

class ftpxp(object):

def __init__(self,**args):
self.ftp=None
self.rootpath = args['path']

try:
self.ftp = FTP()
timeout = 25
self.ftp.set_pasv(True) #开启被模式
self.ftp.set_debuglevel(0)

self.ftp.connect(host=args['host'],port=args['port'],timeout=timeout)
print 'ftp connect....'

except Exception as e:
raise Exception('ftp connect faile...%s'%(e.message))

try:
self.ftp.login(user=args['user'],passwd=args['passwd'])
print 'ftp login suceess'
except Exception as e:
raise Exception('ftp login faile..%s'%(e.message))

try:
self.ftp.cwd(args['path'])
print 'cwd dir...%s'%(args['path'])
except Exception as e:
raise Exception('ftp can not change dir %s..%s'%(args['path'],e.message))


def put(self,localpath,remotepath):
'''
文件上传
:param localpath:
:param remotepath:
:return:
'''

path = os.path.dirname(remotepath)
#print path

#试着进入?
try:
self.ftp.cwd(path)
print 'cwd path...%s'%(path)
except Exception as e:
#不存在?试着创建[多级目录]?
self.mkdir(path)
#再进入
self.ftp.cwd(path)
print 'mkdir..%s'%(path)

fp = open(localpath,'rb')
print 'send %s--->%s...'%(localpath,remotepath)
try:
self.ftp.storbinary('STOR %s'%(remotepath),fp)
except Exception as e:
raise Exception('%s'%(e.message))
finally:
#一定要关闭
fp.close()

def mkdir(self,paths):
'''
创建目录?创建好后,回到根目录??
'''
cpath=self.rootpath

if cpath!='/':
pathA =paths.replace(self.rootpath,'')
else:
pathA = paths

pathA = pathA.split('/')
#print pathA

for pts in pathA:
if not pts:
continue

currentpath = '%s%s'%(cpath,pts)
#print currentpath
try:
self.ftp.cwd(currentpath)
cpath = '%s/'%(currentpath)
except Exception as e:
self.ftp.mkd(currentpath)

#完了回到目录?
self.ftp.cwd(self.rootpath)

'''
释放资源
'''
def quit(self):
self.ftp.quit()

def close(self):
self.ftp.close()

def __del__(self):
#self.ftp.quit()
pass







使用时:

#配置

ftpconfig = {'host':'xx','port':'xxx','user':'xx'.....}

#连接

ftpobj = ftpclass.ftpxp(host=ftpconfig['host'],port=ftpconfig['port'],
user=ftpconfig['user'],passwd=ftpconfig['passwd'],path=ftpconfig['path'])

#上传

localpath ='/t.txt'
remotepath = '%s/fc/t.txt'%(ftpconfig['path'])
ftpobj.put(localpath,remotepath)


如果你在使用中,报 socket.error: [Errno 10060]
那么你可以使用 self.ftp.set_pasv(False) 被动模式,如果仍然报错,那即有可能是你的服务器IP端口不通。
这种情况:FTP能正常连接,能登录、能创建目录,就是上传文件不行。也是IP端口不通。你可以查一下IP通信。

  评论这张
 
阅读(118)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017