`
cooler1217
  • 浏览: 377405 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

python ftp上传下载文件,支持断点续传

 
阅读更多
功能:ftp断点上传下载

仅供参考:

#encoding=utf-8
'''
Created on 2012-3-14

@author: cooler
'''
from ftplib import FTP  
import sys  
import os.path  
  
class MyFTP(FTP):  
    ''''' 
    conncet to FTP Server 
    '''  
    def __init__(self):
        print 'make a object'
    def ConnectFTP(self,remoteip,remoteport,loginname,loginpassword):  
        ftp=MyFTP()

        try:
            ftp.connect(remoteip,remoteport,600)
            print 'success'
        except:
            print "conncet failed1"
            return (0,'conncet failed')  
        else:  
            try:  
                ftp.login(loginname,loginpassword)  
                print 'login success'
            except:  
                print 'login failed'
                return (0,'login failed')  
            else:  
                print 'return 1'
                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.ConnectFTP("192.168.100.237","21","cooler","123123")
    lf.download("192.168.100.237","21","cooler","123123","/tmp/cooler/boke.rar","C:/cooler/boke.rar")
    lf.upload("192.168.100.237","21","cooler","123123","/tmp/cooler/boke1.rar","C:/cooler/boke.rar")
分享到:
评论

相关推荐

    Python-FTP小demo未实现断点续传

    FTP断点续传是一项重要的功能,尤其是在处理大文件时,可以提高效率并避免因网络问题导致的传输失败。在Python中实现断点续传通常需要以下步骤: 1. **连接到FTP服务器**:使用ftplib中的FTP类,通过`FTP()`构造...

    python多线程,断点续传下载程序

    python多线程,断点续传下载程序,功能比较简单,可以进行二次开发。实现更好用的 功能。

    python实现可以断点续传和并发的ftp程序

    3. **文件传输**:支持文件上传和下载,其中特别关注断点续传功能的实现。 ##### 服务端设计思路 1. **用户管理**:包括用户信息的存储与验证。 2. **命令处理**:根据客户端发送的命令执行相应操作,如列出文件...

    大文件上传(支持断点续传)

    在"FileUpLoad"这个文件中,很可能包含了实现大文件上传和支持断点续传的代码示例、库、教程或者配置文件。开发者可以通过研究这些内容来学习如何在自己的项目中实现类似的功能。这涉及到对网络编程、前端JavaScript...

    python ftp断点上传下载

    python ftp断点上传下载,支持主、从模式断点上传及下载

    FTP文件夹上传及断点续传

    实现FTP断点续传需要以下步骤: 1. 检查文件是否存在:在开始上传之前,检查服务器上是否已有该文件,如果存在则获取其当前大小。 2. 记录本地文件状态:保存本地文件的当前位置(即已上传的字节数)。 3. 设置FTP...

    PYTHON单任务FTP断点续传程序

    自己写的单任务FTP断点续传程序,新创建的任务会存到日志文件中(可存储多个任务的日志),异常中断重启时可以选择指定任务继续下载。程序比较简单,也可以说比较简陋,有些问题并未细致的考虑,比如磁盘空间不足等...

    FTP断点续传

    例如,使用C++的libcurl库或者Python的ftplib库可以方便地处理FTP断点续传。开发者需要处理好错误检测、状态保存、重试机制等复杂性。 工具方面,有许多现成的FTP客户端软件如FileZilla、WinSCP等,它们内置了断点...

    商业编程-源码-FTP、HTTP 多线程断点续传下载文件.zip

    这个压缩包"商业编程-源码-FTP、HTTP 多线程断点续传下载文件.zip"包含的源码着重展示了如何利用FTP(文件传输协议)和HTTP(超文本传输协议)实现多线程的断点续传下载功能,这在大型文件下载或网络环境不稳定的...

    FTP及断点续传原理

    总的来说,FTP及断点续传原理是网络开发和运维中的基础技能,了解和掌握这些知识对于进行文件传输相关的系统设计和故障排查至关重要。通过学习提供的资源,你可以深入理解FTP的工作机制,以及如何实现断点续传功能,...

    linux多线程下载断点续传

    对于FTP协议,虽然在本例中未实现,但FTP同样支持断点续传,通过REST(Restart from Position)命令可以指定从哪个位置继续下载。 在提供的压缩包文件中,"www.pudn.com.txt"可能是包含有关下载程序源代码、说明或...

    ftp协议实现多线程断点续传

    通过理解FTP协议的工作原理,结合多线程技术和断点续传机制,开发者可以创建高效、可靠的文件下载应用程序。在实际项目中,选择合适的FTP库,并遵循最佳实践,能有效提高文件传输的效率和可靠性。

    商业编程-源码-ftp协议实现多线程断点续传.zip

    FTP(File Transfer Protocol)协议是Internet上用于在主机之间传输文件的标准协议,它允许用户从一台计算机(客户端)向另一台计算机(服务器)上传或下载文件。多线程和断点续传是FTP协议实现中两个重要的技术特性...

    Python-python上传excel表格数据到ftp服务器

    在Python编程中,将Excel表格数据上传到FTP服务器是一项常见的任务,特别是在数据处理和文件共享的场景下。这里,我们主要关注如何使用Python的库来实现这个功能,以及FTP网络编程的基本概念。 首先,我们需要了解...

    实现ftp断点下载和上传

    在实现FTP断点下载和上传时,通常会使用编程语言中的FTP库或工具。例如,在Java中,可以使用Apache Commons Net库,它提供了FTPClient类来支持FTP功能,包括断点续传。Python中则有ftplib模块,同样可以处理此类...

    支持多线程断点续传的文件传输(FTP)程序(含服务端和客户端、支持蓝牙(Bluetooth)传输).zip

    本文将深入探讨一个特定的文件传输解决方案:支持多线程断点续传的FTP程序,该程序同时包含服务端和客户端,并且具备蓝牙传输功能。这样的系统设计能够显著提高文件传输效率,尤其是在网络不稳定或大文件传输时,其...

    Python实现可配置的sftp传输

    配置文件为.ini文件;put和get区分一下源和目的路径,基本配置项即说明如下: [ftp]:ftp基本信息 [common] 公共的配置 如日志信息,传输模式,是否递归,是否删除等 [src_path] 源路径信息,如果是get,此项为远端...

    http ftp 断点下载

    二、ftp断点续传 1. ftp协议基础:FTP(文件传输协议)是互联网上用于文件传输的标准协议。与HTTP不同,FTP天生支持断点续传。 2. REST (Restart)命令:FTP提供REST命令,允许客户端指定一个文件的偏移量,服务器...

    python ftp get

    Python FTP Get是一个常见的任务,它涉及到使用Python编程语言来实现FTP(File Transfer Protocol)客户端功能,以便从远程服务器上下载...在实际应用中,可以根据需求进行扩展,比如实现多线程下载、断点续传等功能。

Global site tag (gtag.js) - Google Analytics