ftp传输最后一直卡在最后10秒_FTP上传大文件程序卡死
在使用ftp上传文件的过程中发现程序很久不结束,起初以为是缓冲区设置过小导致传输速度变慢,但是几个小时都不见结束,通过查看ftp盘的文件发现文件上传其实已经结束,可是程序却没有结束
其实通过ftp上传文件会建立两个tcp连接,一条控制连接用来提交指令和接受回复,另一条数据连接是用来传输数据的,当指令发布完成后,控制连接会进入空闲状态,tcp不会对空闲状态的连接有时间限制,但是防火墙会提前杀掉空闲连接,并且数据连接是不感知的,所以文件传输完成的通知就不会被感知从而导致程序卡死
分享一下python的ftplib传输文件以及查看ftp盘文件信息的代码
# 上传文件
import ftplib
import sys
import datetime
today = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
yesterday = today - datetime.timedelta(days=1)
f=ftplib.FTP("ip") # 实例化FTP对象
f.login("user", "password") # 登录
def ftp_upload():
file_remote="filename" # 指定上传文件名
file_local="" # 要上传的文件路径
bufsize=2048 # 设置缓冲器大小
fp=open(file_local, 'rb')
result=f.storbinary("STOR " + file_remote, fp, bufsize)
print(result)
fp.close()
ftp_upload()
f.quit()
# 查看ftp盘文件信息
from ftplib import FTP, error_perm
import os
import re
class MyFTP(FTP):
encoding = "utf-8"
def getdirs(self, dirpath=None):
"""
获取当前路径或者指定路径下的文件、目录
"""
if dirpath != None:
self.cwd(dirpath)
dir_list = []
self.dir('.', dir_list.append)
dir_name_list = [dir_detail_str.split(' ')[-1] for dir_detail_str in dir_list]
return [file for file in dir_name_list if file != "." and file !=".."]
def checkFileDir(self, dirpath):
"""
检查指定路径是目录还是文件
"""
rec = ""
try:
rec = self.cwd(dirpath) # 需要判断的元素
self.cwd("..") # 如果能通过路劲打开必为文件夹,在此返回上一级
except error_perm as fe:
rec = fe # 不能通过路劲打开必为文件,抓取其错误信息
finally:
if "Not a directory" in str(rec):
return "File"
elif "Current directory is" in str(rec):
return "Dir"
else:
return "Unknow"
def get_modify_time(self, dirpath=None):
"""
得到指定目录、文件或者当前目录、文件的修改时间
"""
if dirpath != None:
if dirpath[-1] == '/':
dir_path = os.path.split(dirpath[0: -1])[0]
current_name = os.path.split(dirpath[0: -1])[1]
else:
dir_path = os.path.split(dirpath)[0]
# .strip()是为了避免出现”/ 2095-8757“这种情况,下面匹配不到
current_name = os.path.split(dirpath)[1].strip()
self.cwd(dir_path)
else:
dirpath = self.pwd()
dir_path = os.path.split(dirpath)[0]
current_name = os.path.split(dirpath)[1]
self.cwd(dir_path)
detail_list = []
self.retrlines('MLSD', detail_list.append)
current_info = ''
for detail_info in detail_list:
# 文件和目录不一样
# 文件从字符串获取名称
if detail_info.split(';')[3].strip() == current_name:
current_info = detail_info
break
if not current_info:
for detail_info in detail_list:
# 目录从字符串获取名称
if detail_info.split(';')[2].strip() == current_name:
current_info = detail_info
modify_time = re.search(r'modify=(.*);', current_info)
return modify_time
from test import MyFTP
import os
def connect_ftp(host, user, passwd):
ftpServer = MyFTP()
ftpServer.encoding = "utf-8"
ftpServer.connect(host=host)
ftpServer.login(user=user, passwd=passwd)
return ftpServer
# 连接服务器(参数是你的ftp服务器东西)
ftpServer = connect_ftp("ip", "user", "password")
print(ftpServer.getdirs())
print(ftpServer.size(filename=""))
)
ftp传输最后一直卡在最后10秒_FTP上传大文件程序卡死相关推荐
- ftp传输最后一直卡在最后10秒_迅雷下载总卡在最后99 9%详细处理方法【图文】...
在使用迅雷下载东西的时候,我们经常会遇到迅雷下载总卡在最后99 9%的情况,那出现这一问题我们该怎么来解决呢?有很多网友都有这一疑问,所以对于这种情况,今天本文为大家整理分享的就是关于迅雷下载总卡在最 ...
- FTP上传大文件时连接重置或者中断,重新连接上传也出现同样情况处理办法
上传大文件的时候经常连接被重置或者中断,重新连接上传出现同样错误,具体错误如下图所示: 原因:机房防火墙设置了tcp空闲5分钟中断,如果使用被动模式上传较大的文件,上传速度比较慢时容易造成超时,所以连 ...
- java ftp上传文件0字节_FTP上传无文件以及0字节问题
这几天在做一个FTP上传文件的功能,在本地运行完全没有问题,上传文件成功,图片成功显示.在公网(centos系统)上进行测试的时候就出了问题了,上传一直卡到storeFile上,一般是会卡住30-60 ...
- asp 中使用Ftp.exe 上传大文件
'参数说明:FTP 服务器 :帐号 : 密码 :要上传的文件名(需要完整路径),FTp虚拟目录名称 Function upFile(ftp_address, ftp_username, ftp_pa ...
- FTPrush给Linux上传文件,LINUX CENTOS 7安装FTP服务器详细讲解(配图),FTPRUSH连接上传测试文件...
安装FTP 1.安装命令 yum install vsftpd -y 2.查看启动状况 systemctl status vsftpd 3.停止,启动,vsftpd systemctl stop vs ...
- ftp 追加远程文件_ftp上传,完成ftp定时上传、下载只需3步
FTP[File Transfer Protocol]中文译为文件传输协议,是Internet上的另一项主要服务,这项服务让使用者能通过Internet来传输各式各样的文件.FTP上传是与WEB上传相 ...
- uniapp 定时执行_ftp上传,完成ftp定时上传、下载只需3步
FTP[File Transfer Protocol]中文译为文件传输协议,是Internet上的另一项主要服务,这项服务让使用者能通过Internet来传输各式各样的文件.FTP上传是与WEB上传相 ...
- 如何快速地向服务器传大文件,大文件如何快速传输
在这个互联网时代,信息更新速度逐渐加快.用户在进行文件传输时,一定是希望既稳定又快速的,并且还能够保证安全.但是通常来讲,FTP文件传输并不能同时实现这三点的,特别是上传大文件时,FTP上传文件速度明 ...
- Java通过FTP服务器上传下载文件的方法
本文介绍了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作 ...
最新文章
- 36晋级12第四场:评委弃权 无人晋级
- mysql 至少有2个年龄大于40岁,在MySQL中计算年龄时出错?
- 【哲学】自由意志是什么?(主观能动性)
- bootstrap全局css样式
- 【python】self cls
- CodeForces - 1363E Tree Shuffling(树上贪心)
- 用phpmyadmin更改root密码的方法
- AttributeError: 'dict' object has no attribute 'iteritems' .iteritems(): 修改为items()
- 可临摹学习的精致的音乐播放器界面设计ui模板
- 通过递归遍历n位2进制数的所有情况
- R+NLP︱text2vec包——BOW词袋模型做监督式情感标注案例(二,情感标注)
- chartControl
- 软件_可用rtmp直播地址20200517
- java 工作流框架都有哪些_java工作流框架有哪些?哪个比较好?
- 界面设计配色方案说明图一(含RGB配色表)
- android锁屏原理(一)
- echarts中国地图线性流动动画js特效
- 分享调试SI4432的一些小经验
- 此公众号并没有这些scope的权限 错误码10005
- java基础之HashMap刨根问底