在python中通过ftplib上传要比手动上传花费更长的时间
所以 出于某种原因,下面的一点点代码比我通过FTP程序或网站本身上传要花更长的时间上传 文件大小为600kb,通过ftp程序/直接通过web最多需要1-3秒,但通过ftplib最多需要15-30秒速度慢了15倍以上 我上传的文件是单行html/php文件(缩小),有没有更快的上传方式 在我的实际代码中,我上传了25个以上的文件,所有文件的总大小最大为1mb,是否有一种批量上传方法,通过在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
.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()
上传输出示例。。。。
有几个原因导致您的传输速度尽可能慢,而应用程序的发送速度要快得多:
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"