python ftplib大文件分片上传(解决上传时间过长导致ftp断连问题)

        当使用ftplib模块上传大文件时,如果传输时间过长,服务端会断开连接,导致代码阻塞。解决的方法就是将要上传的文件拆分为多个部分,先上传第一部分,然后将剩余部分挨个续传到服务器端,每上传一部分都要重新连接FTP。

 代码

from ftplib import FTP


def get_ftp():
    ftp.connect(ip, port)
    ftp.login(username, password)

    return ftp

bufsize = 1024 * 1024
fp = open('20240716-node1.csv', 'rb')
filesize = fp.seek(0, 2)  # 获取文件大小
fp.seek(0)  # 将指针调回到初始位置
# 上传第一部分文件
ftp = get_ftp()
content = fp.read(10 * bufsize)  # 将文件分成每10M为一片
if content:
    part_fn = 'noderank.part0'
    with open(part_fn, 'wb') as part_file:
        part_file.write(content)
    ftp.storbinary('STOR 20240716-node1.csv', open(part_fn, 'rb'), bufsize)
ftp.quit()

# 续传剩余部分
for start in range(10 * bufsize, filesize, 10 * bufsize):
    ftp = get_ftp()
    content = fp.read(10 * bufsize)
    if content:
        part_fn = f'noderank.part{start // 10 / bufsize}'
        with open(part_fn, 'wb') as part_file:
            part_file.write(content)
        ftp.storbinary('APPE 20240716-node1.csv', open(part_fn, 'rb'), bufsize)
    ftp.quit()
fp.close()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值