在python中通过ftplib上传要比手动上传花费更长的时间

在python中通过ftplib上传要比手动上传花费更长的时间,python,python-2.7,file-upload,ftplib,Python,Python 2.7,File Upload,Ftplib,所以 出于某种原因,下面的一点点代码比我通过FTP程序或网站本身上传要花更长的时间上传 文件大小为600kb,通过ftp程序/直接通过web最多需要1-3秒,但通过ftplib最多需要15-30秒速度慢了15倍以上 我上传的文件是单行html/php文件(缩小),有没有更快的上传方式 在我的实际代码中,我上传了25个以上的文件,所有文件的总大小最大为1mb,是否有一种批量上传方法,通过.tmp重命名(防止加载部分更新的页面)对我更有效? import ftplib print "Uploadi

所以

出于某种原因,下面的一点点代码比我通过FTP程序或网站本身上传要花更长的时间上传

文件大小为600kb,通过ftp程序/直接通过web最多需要1-3秒,但通过ftplib最多需要15-30秒速度慢了15倍以上

我上传的文件是单行html/php文件(缩小),有没有更快的上传方式

在我的实际代码中,我上传了25个以上的文件,所有文件的总大小最大为1mb,是否有一种批量上传方法,通过
.tmp
重命名(防止加载部分更新的页面)对我更有效?

import ftplib

print "Uploading FULL.html"
## Login using the ftplib library and set the session as the variable ftp_session
ftp_session = ftplib.FTP('ftp.website.com','admin@website.com','Password1','',60)
## Open a file to upload
ftp_file = open('OUTPUT/DATA/FULL.html','r')
## Open a folder in the ftp server
ftp_session.cwd("/DATA/")
## Send/upload the file to the ftp server
ftp_session.storlines('STOR FULL.html.tmp', ftp_file)
## Close the ftp_file
ftp_file.close()
## Rename temp file
ftp_session.rename("FULL.html.tmp", "FULL.html")

print "Uploading index.php"
## Open a file to upload
ftp_file = open('OUTPUT/index.php','r')
## Send/upload the file to the ftp server
ftp_session.storlines('STOR index.php.tmp', ftp_file)
## Close the ftp_file
ftp_file.close()
## Rename temp file
ftp_session.rename("index.php.tmp", "index.php")

print "Uploading secondary.php"
## Open a file to upload
ftp_file = open('OUTPUT/secondary.php','r')
## Send/upload the file to the ftp server
ftp_session.storlines('STOR secondary.php.tmp', ftp_file)
## Close the ftp_file
ftp_file.close()
## Rename temp file
ftp_session.rename("secondary.php.tmp", "secondary.php")

## Quit out of the FTP session
ftp_session.quit()
上传输出示例。。。。
有几个原因导致您的传输速度尽可能慢,而应用程序的发送速度要快得多:

  • 如果一次发送一行,ftp应用程序将一次发送一个8192字节的数据块
  • 您以文本模式发送,应用程序可能以二进制压缩模式发送
  • 除非行尾有问题,否则使用
    open(filename,“rb”)
    然后
    tp\u session.storbinary('STOR index.php.tmp',ftp\u file)
    您也可以尝试发送命令
    'MODE COMPRESSED'
    并检查回复,您可以使用块大小来找到最佳值

    我会设置的另一个东西是:

    import glob, os, ftplib
    from time import time
    
    sourcedir = '/where/your/files/are/locally'
    destdir = '/where/to/put/them'
    ##    filelist = ['file2.ext', 'file2.ext', 'etc']
    filelist = glob.glob(os.path.join(sourcedir, '*.php'))
    
    ftp_session = ftplib.FTP('ftp.website.com','admin@website.com','password123','',60)
    ftp_session.cwd(destdir)
    
    for fname in filelist:
        filename = fname.replace(sourcedir+'\\', "")
        ftp_file = open(fname,'rb')
        result = ftp_session.storbinary('STOR %s.tmp' % filename, ftp_file)
        ftp_file.close()
        if 199 < int(result[0:3]) < 300: # Positive Completion
            ftp_session.rename('%s.tmp' % filename, filename)
        else:
            print "Upload of %s resulted in code %s" % (filename, result)
            break
    
    导入glob、os、ftplib
    从时间导入时间
    sourcedir='/where/your/files/are/local'
    destdir='/where/to/put/them'
    ##filelist=['file2.ext','file2.ext','etc']
    filelist=glob.glob(os.path.join(sourcedir,'.*.php'))
    ftp_session=ftplib.ftp('ftp.website.com','admin@website.com“,”密码123“,”,60)
    ftp_session.cwd(destdir)
    对于文件列表中的fname:
    filename=fname.replace(sourcedir+'\\','')
    ftp_file=open(fname,'rb')
    结果=ftp\u会话.storbinary('STOR%s.tmp'%filename,ftp\u文件)
    ftp_file.close()
    如果199

    您可能会压缩或tar.gz您的文件并发送这些文件,但您需要一个安全的套接字连接和适当的权限来单独解包。

    定义块大小以及ftp连接的storbinary,这样您的连接速度将比ftp文件快1.5-3.0x:)


    尝试使用a转储
    ftplib
    网络流量,并检查它和/或与手动案例进行比较。@VasiliyFaronov这肯定是错误的,但使用嗅探器我找不到任何错误。我试过wireshark、caspa、snoop和其他一些方法,但没有发现什么问题。有没有一种简单的方法来做一些事情,比如压缩文件,上传压缩和解压缩(idk任何解压缩的方法),我想你的速度变慢的原因是重命名。在运行代码snippit时,我得到了以下错误:
    if 199
    ,我在文档中找不到关于压缩的任何地方,至于发送storbinary,我在切断一些html/php文件时遇到了问题。对上面的数字进行细微更改以隔离可能有助于解决错误-有关压缩的一些详细信息,请参阅感谢您的细微编辑,我对你的帖子进行了编辑,修改了一些内容,如导入、字符串格式错误和其他一些更改。通过
    storlines
    上传了30个文件,每个文件花费了60-70秒,而使用
    storbinary
    则花费了63-69秒,在所有的时间里,他们的平均上传时间是66秒,总计约500kb。
    import glob, os, ftplib
    from time import time
    
    sourcedir = '/where/your/files/are/locally'
    destdir = '/where/to/put/them'
    ##    filelist = ['file2.ext', 'file2.ext', 'etc']
    filelist = glob.glob(os.path.join(sourcedir, '*.php'))
    
    ftp_session = ftplib.FTP('ftp.website.com','admin@website.com','password123','',60)
    ftp_session.cwd(destdir)
    
    for fname in filelist:
        filename = fname.replace(sourcedir+'\\', "")
        ftp_file = open(fname,'rb')
        result = ftp_session.storbinary('STOR %s.tmp' % filename, ftp_file)
        ftp_file.close()
        if 199 < int(result[0:3]) < 300: # Positive Completion
            ftp_session.rename('%s.tmp' % filename, filename)
        else:
            print "Upload of %s resulted in code %s" % (filename, result)
            break
    
    from ftplib import FTP
    
    USER = "Your_user_id"
    PASS = "Your_password"
    PORT = 21
    SERVER = 'ftp.billionuploads.com' #use FTP server name here
    
    ftp = FTP()
    ftp.connect(SERVER, PORT)
    ftp.login(USER, PASS)
    
    try:
        file = open(r'C:\Python27\1.jpg','rb')
        ftp.storbinary('STOR ' + '1.jpg', file,102400) #here we store file in 100kb blocksize
        ftp.quit()
        file.close()
        print "File transfered"
    except:
        print "Error in File transfering"