在使用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上传大文件程序卡死相关推荐

  1. ftp传输最后一直卡在最后10秒_迅雷下载总卡在最后99 9%详细处理方法【图文】...

    在使用迅雷下载东西的时候,我们经常会遇到迅雷下载总卡在最后99 9%的情况,那出现这一问题我们该怎么来解决呢?有很多网友都有这一疑问,所以对于这种情况,今天本文为大家整理分享的就是关于迅雷下载总卡在最 ...

  2. FTP上传大文件时连接重置或者中断,重新连接上传也出现同样情况处理办法

    上传大文件的时候经常连接被重置或者中断,重新连接上传出现同样错误,具体错误如下图所示: 原因:机房防火墙设置了tcp空闲5分钟中断,如果使用被动模式上传较大的文件,上传速度比较慢时容易造成超时,所以连 ...

  3. java ftp上传文件0字节_FTP上传无文件以及0字节问题

    这几天在做一个FTP上传文件的功能,在本地运行完全没有问题,上传文件成功,图片成功显示.在公网(centos系统)上进行测试的时候就出了问题了,上传一直卡到storeFile上,一般是会卡住30-60 ...

  4. asp 中使用Ftp.exe 上传大文件

    '参数说明:FTP 服务器 :帐号 : 密码 :要上传的文件名(需要完整路径),FTp虚拟目录名称  Function upFile(ftp_address, ftp_username, ftp_pa ...

  5. FTPrush给Linux上传文件,LINUX CENTOS 7安装FTP服务器详细讲解(配图),FTPRUSH连接上传测试文件...

    安装FTP 1.安装命令 yum install vsftpd -y 2.查看启动状况 systemctl status vsftpd 3.停止,启动,vsftpd systemctl stop vs ...

  6. ftp 追加远程文件_ftp上传,完成ftp定时上传、下载只需3步

    FTP[File Transfer Protocol]中文译为文件传输协议,是Internet上的另一项主要服务,这项服务让使用者能通过Internet来传输各式各样的文件.FTP上传是与WEB上传相 ...

  7. uniapp 定时执行_ftp上传,完成ftp定时上传、下载只需3步

    FTP[File Transfer Protocol]中文译为文件传输协议,是Internet上的另一项主要服务,这项服务让使用者能通过Internet来传输各式各样的文件.FTP上传是与WEB上传相 ...

  8. 如何快速地向服务器传大文件,大文件如何快速传输

    在这个互联网时代,信息更新速度逐渐加快.用户在进行文件传输时,一定是希望既稳定又快速的,并且还能够保证安全.但是通常来讲,FTP文件传输并不能同时实现这三点的,特别是上传大文件时,FTP上传文件速度明 ...

  9. Java通过FTP服务器上传下载文件的方法

    本文介绍了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作 ...

最新文章

  1. 36晋级12第四场:评委弃权 无人晋级
  2. mysql 至少有2个年龄大于40岁,在MySQL中计算年龄时出错?
  3. 【哲学】自由意志是什么?(主观能动性)
  4. bootstrap全局css样式
  5. 【python】self cls
  6. CodeForces - 1363E Tree Shuffling(树上贪心)
  7. 用phpmyadmin更改root密码的方法
  8. AttributeError: 'dict' object has no attribute 'iteritems' .iteritems(): 修改为items()
  9. 可临摹学习的精致的音乐播放器界面设计ui模板
  10. 通过递归遍历n位2进制数的所有情况
  11. R+NLP︱text2vec包——BOW词袋模型做监督式情感标注案例(二,情感标注)
  12. chartControl
  13. 软件_可用rtmp直播地址20200517
  14. java 工作流框架都有哪些_java工作流框架有哪些?哪个比较好?
  15. 界面设计配色方案说明图一(含RGB配色表)
  16. android锁屏原理(一)
  17. echarts中国地图线性流动动画js特效
  18. 分享调试SI4432的一些小经验
  19. 此公众号并没有这些scope的权限 错误码10005
  20. java基础之HashMap刨根问底

热门文章

  1. 照片编辑软件app有哪些?照片编辑软件分享。
  2. c语言读写文件 eof,C语言文件操作之EOF解析
  3. Spring Boot jar 启动时设置环境参数
  4. 什么时候起,软件测试面试都已经这么难了?
  5. 2023年江苏省职业院校技能大赛中职网络安全赛项试卷-学生组任务书
  6. 监控宝 监控oracle,Prometheus Grafana之Oracle监控
  7. 敦智宝——努力的理由
  8. 机器学习实战 - 基于概率论的分类方法:朴素贝叶斯
  9. 音频中的采样率和比特率的关系
  10. 小鹏汽车L3自动驾驶方案---基于NVIDIA Xavier