原创文章,转载请注明出处:http://zhouzaibao.iteye.com
前段时间使用java写了一个支持断点续传的FTP类库,但是这个库在使用过程中还是有点问题,最近在学习python,就打算用python写一个。
其实在使用java写的那个过程中也遇到了一些比较难解决的问题,比如说在多个ftp客户端同事向一个FTP服务器端发送上传命令,这个时候会造成线程挂起不会抛异常也不会退出,这个让我头疼的好久,现在用python写了一个,
目前更改的类主要实现的断点下载和断点上传,欢迎大家批评指正。
#!/usr/bin/env python
# -*- coding: gbk -*-
from ftplib import FTP
import sys
import os.path
class MyFTP(FTP):
'''
conncet to FTP Server
'''
def ConnectFTP(self,remoteip,remoteport,loginname,loginpassword):
ftp=MyFTP()
try:
ftp.connect(remoteip,remoteport)
except:
return (0,'conncet failed')
else:
try:
ftp.login(loginname,loginpassword)
except:
return (0,'login failed')
else:
return (1,ftp)
def download(self,remoteHost,remotePort,loginname,loginpassword,remotePath,localPath):
#connect to the FTP Server and check the return
res = self.ConnectFTP(remoteHost,remotePort,loginname,loginpassword)
if(res[0]!=1):
print res[1]
sys.exit()
#change the remote directory and get the remote file size
ftp=res[1]
ftp.set_pasv(0)
dires = self.splitpath(remotePath)
if dires[0]:
ftp.cwd(dires[0])
remotefile=dires[1]
print dires[0]+' '+ dires[1]
fsize=ftp.size(remotefile)
if fsize==0 :
return
#check local file isn't exists and get the local file size
lsize=0L
if os.path.exists(localPath):
lsize=os.stat(localPath).st_size
if lsize >= fsize:
print 'local file is bigger or equal remote file'
return
blocksize=1024
cmpsize=lsize
ftp.voidcmd('TYPE I')
conn = ftp.transfercmd('RETR '+remotefile,lsize)
lwrite=open(localPath,'ab')
while True:
data=conn.recv(blocksize)
if not data:
break
lwrite.write(data)
cmpsize+=len(data)
print '\b'*30,'download process:%.2f%%'%(float(cmpsize)/fsize*100),
lwrite.close()
ftp.voidcmd('NOOP')
ftp.voidresp()
conn.close()
ftp.quit()
def upload(self,remotehost,remoteport,loginname,loginpassword,remotepath,localpath,callback=None):
if not os.path.exists(localpath):
print "Local file doesn't exists"
return
self.set_debuglevel(2)
res=self.ConnectFTP(remotehost,remoteport,loginname,loginpassword)
if res[0]!=1:
print res[1]
sys.exit()
ftp=res[1]
remote=self.splitpath(remotepath)
ftp.cwd(remote[0])
rsize=0L
try:
rsize=ftp.size(remote[1])
except:
pass
if (rsize==None):
rsize=0L
lsize=os.stat(localpath).st_size
if (rsize==lsize):
print 'remote filesize is equal with local'
return
if (rsize<lsize):
localf=open(localpath,'rb')
localf.seek(rsize)
ftp.voidcmd('TYPE I')
datasock,esize=ftp.ntransfercmd("STOR "+remote[1],rsize)
cmpsize=rsize
while True:
buf=localf.read(1024)
if not len(buf):
print '\rno data break'
break
datasock.sendall(buf)
if callback:
callback(buf)
cmpsize+=len(buf)
print '\b'*30,'uploading %.2f%%'%(float(cmpsize)/lsize*100),
if cmpsize==lsize:
print '\rfile size equal break'
break
datasock.close()
print 'close data handle'
localf.close()
print 'close local file handle'
ftp.voidcmd('NOOP')
print 'keep alive cmd success'
ftp.voidresp()
print 'No loop cmd'
ftp.quit()
def splitpath(self,remotepath):
position=remotepath.rfind('/')
return (remotepath[:position+1],remotepath[position+1:])
if __name__=='__main__':
lf = MyFTP()
lf.download('127.0.0.1',21,'test','123456','/media/purecore.exe','F:\\Downloads\\software\\PureCodectemp.exe')
分享到:
相关推荐
Python 语言可以通过 ftplib 模块来实现 FTP 客户端功能,从 FTP 服务器上下载文件。本文将详细介绍 Python 中的 FTP 操作流程和实现方法。 FTP 操作基本流程 1. 连接 FTP 服务器:使用 `FTP.connect` 方法连接到 ...
本项目名为"pyinstaller+python3+FTP上传简易版本",它提供了一个简单的方法来创建一个基于Python3的FTP服务器,并通过PyInstaller将其打包成独立的.exe可执行文件,以便在Windows环境中运行。 PyInstaller是Python...
通过学习以上步骤和实际代码,你可以掌握在Python环境中使用FTP进行文件传输的核心知识,这对于在开发中处理文件传输需求非常有用。同时,了解`ftplib`库和相关数据处理库的用法,有助于提升你在网络编程和数据处理...
要通过FTP上传文件,可以按照以下描述进行操作: 导入所需模块:首先,导入ftplib模块来实现FTP连接和操作。 建立FTP连接:使用ftplib模块中的FTP类创建一个FTP对象,并使用它来建立与FTP服务器的连接。需要提供...
`ftp.zip`这个压缩包中包含了一个名为`ftp.py`的Python脚本,它应该是一个实现了FTP文件上传功能的实用工具。 在Python中,我们可以使用内置的`ftplib`库来处理FTP通信。`ftplib`提供了一系列的方法和类,使我们...
FTP上传下载工具类通常是指一个编程接口或代码库,为开发者提供便捷的FTP客户端功能,包括连接到FTP服务器、上传文件、下载文件以及管理远程目录等操作。 在开发中,我们可能遇到以下关键知识点: 1. FTP基本概念...
Python 编写的FTP下载器是一个基于FTP协议的实用工具,它允许用户从远程服务器上下载文件。这个下载器由两部分组成:客户端和服务端。客户端是用户与FTP服务器交互的界面,而服务端则处理来自客户端的请求并执行实际...
主方法 `upload` 调用了之前定义的方法来实现上传功能,最后通过示例演示了如何使用该类上传文件和文件夹。 #### 四、总结 本文介绍了一个 Python 实现 FTP 上传文件或文件夹的实例,通过定义类和方法的方式,实现...
综上所述,实现FTP定时上传下载文件涉及多个技术层面,包括选择合适的FTP客户端库,编写执行FTP操作的脚本,设置定时任务,以及确保安全性和可靠性。理解这些知识点,就能构建出稳定可靠的FTP自动化解决方案。
在IT领域,Python是一种广泛应用的编程语言,尤其在网络服务开发中,它的简洁性和...通过这个项目,开发者可以提升网络服务开发能力,对网络协议有更深入的理解,并掌握如何在Python中实现安全、高效的文件传输服务。
在本文中,我们将深入探讨FTP服务器上传下载的基本概念,并通过一个示例代码来展示其实现过程。 FTP服务器是运行FTP服务的计算机,它提供了一个平台,使得用户可以访问并操作远程文件系统。FTP客户端则是与服务器...
Python 实现从FTP服务器下载文件是一项常见的任务,尤其在数据迁移、备份或者远程协作中非常有用。以下将详细讲解如何使用Python的`ftplib`模块来实现这一功能,并结合给出的代码片段进行解析。 首先,我们需要导入...
该模块包含了一系列的类和方法,可以用来执行FTP的基本操作,如登录、下载、上传、更改目录、列出目录内容等。 #### 登录FTP服务器 使用`ftplib.FTP()`创建一个FTP对象后,可以通过调用`login()`方法来登录到FTP...
ftplib包含了一系列的类和函数,如FTP、FTP_TLS、FTPClient等,它们可以帮助我们实现FTP服务器的基本功能,如登录验证、文件上传和下载。 首先,创建FTP服务器通常涉及以下步骤: 1. 导入ftplib模块:`import ...
在这个实例中,我们关注的是如何实现一个带有进度条的FTP文件上传功能。这个FTP上传实例提供了可视化的进度反馈,使得用户能够清晰地看到文件上传的进度,提高了用户体验。 FTP上传的核心原理是通过FTP客户端连接到...
Python中的FTP下载文件是通过内置的`ftplib`模块实现的。`ftplib`提供了FTP协议的客户端功能,使得我们可以在Python程序中方便地进行文件的上传和下载。以下是对标题和描述中所述知识点的详细解释: 1. **导入ftp...
Python中的`ftplib`模块提供了实现FTP客户端功能的基础,我们可以利用这个模块来创建连接、上传、下载和管理远程文件。 在PyCharm这样的集成开发环境中,创建FTP客户端GUI应用程序可以借助如Tkinter或PyQt这样的库...
在Python中,ftplib提供了FTP客户端的功能,允许我们连接到FTP服务器,进行文件的上传、下载等操作。以下是对标题和描述中涉及的知识点的详细解释: 1. **ftplib模块**: Python的ftplib模块是标准库的一部分,它...
FTP协议定义了多种命令,如`USER`、`PASS`、`LIST`、`GET`、`PUT`等,用于控制文件的上传、下载、查看目录等操作。FTP有两个主要的通道:命令通道用于传递控制信息,如用户认证、文件操作指令等;数据通道则负责实际...
Python Socketserver库是用于创建自定义网络服务器的模块,它简化了处理客户端连接和请求的过程。...通过这个库,开发者可以轻松地实现文件上传和下载功能,以及扩展其他FTP命令,以满足特定的需求。