如何在Python中恢复中断的FTP上传

2023-12-31

我需要手动中断 FTP 上传,然后测试是否可以恢复上传。我正在使用 Python 的 ftplib 模块。 我试过下面的代码:

# Consider I have logged in using valid ftp user
# File is of 20 MB
counter = 0
file_name = 'test.dat'
ftp_dir = 'test_ftp_dir'

with open(file_address, 'rb') as file:
    ftp.set_debuglevel(2)
    ftp.cwd(ftp_dir)
    ftp.voidcmd('TYPE I')
    with ftp.transfercmd(f'STOR {file_name}', None) as conn:
        while True:
            # Read 1 MB
            buf = file.read(1000000)
            if not buf:
                break
            conn.sendall(buf)
            counter += 1
            if counter == 5:
                # Stop after 5 MB
                LOG.info("STEP-3: Abort client transfer")
                break

# Reading file again and logging again using the ftp user
with open(file_address, 'rb') as file:
    ftp.set_debuglevel(2)
    ftp.cwd(ftp_dir)
    ftp.voidcmd('TYPE I')
    ftp.storbinary(f'STOR {file_name}', file, rest=ftp.size(file_name))

它不是从 5 MB 重新开始上传,而是在附加到原始文件的同时发送完整文件。假设我发送了 5 MB 的文件,那么我可以看到 5 MB 的文件,当我尝试恢复它时,它会发送整个 20 MB 的文件,使其成为总共 25 MB 的文件。请帮我解决这个问题。谢谢。


在开始传输之前,您必须将源本地文件查找到重新启动位置:

# Reading file again and logging again using the ftp user
with open(file_address, 'rb') as file:
    rest = ftp.size(file_name)
    file.seek(rest)
    ftp.cwd(ftp_dir)
    ftp.storbinary(f'STOR {file_name}', file, rest=rest)

ftplib 不会为您寻找该文件,这会限制它的使用。在某些情况下,您不希望它寻找。还有一些类似文件的对象不支持查找。


FTP断点上传的完整代码请参见:
Python ftplib FTP传输文件上传中处理断开连接 https://stackoverflow.com/q/67140561/850848

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中恢复中断的FTP上传 的相关文章

随机推荐

  • 都在同一个视图 MVC3 中创建和列出

    所以我想做的是在同一视图中同时创建和列出一个视图 所以我读到我可以为此使用 ViewModel 所以我创建了我的视图模型 Evento ViewModel public class EventoViewModel public Evento
  • 如何使locateCenterOnScreen更准确-PYTHON-,-WINDOWS-

    您好 我的目标是能够让我的机器人在任何屏幕尺寸上单击我选择的内容 因为我认为这是主要问题 我尝试降低置信度 但最终只是点击了具有相同一般颜色的其他内容 我用精确的图像对其进行了测试 它点击了正确的位置 因此它不像坐标已关闭或任何其他东西 它
  • 程序不包含适合入口点的静态“main”方法

    我知道这个问题已经被问了很多次 但似乎没有一个解决方案对我有用 或者我只是无能 需要我的手来解决这个问题 最有可能的解决方案 我查看了所有类 并且所有构建操作都设置为编译 所以我不知道可能出了什么问题 有什么帮助吗 额外细节 我一直在编写游
  • 设置mapView的边界

    我有一个应用程序调用 api 并返回位置列表 返回数据后 我将 JSON 转换为地图点以进行注释 这些都可以毫无问题地添加到 ma 中 我遇到的问题是设置地图的边界 我似乎无法弄清楚 我目前拥有的代码是 handleResponse res
  • 在后台运行 matlab

    我正在 48 个虚拟机上运行 matlab 并且希望将其自动化 我通过 ssh 进入机器然后使用matlab r matlab command gt outfile txt 让进程在后台运行并在我注销时正常运行 唯一的问题是当我jobs我的
  • 登录后react-redux重定向到其他页面

    action js export const login creds gt console log url login const requestOptions method POST headers Accept application
  • 卸载时如何删除设置

    我的程序是通过 Visual Studio 安装项目安装的 该程序运行时会创建一个user config文件位于其默认位置 因为我正在使用Settings http msdn microsoft com en us library aa73
  • 如何使用 Inno Setup 确定是否安装了特定的 Windows 更新包 (KB*.msu)?

    我想知道如何确定目标计算机中是否安装了特定的 Windows 更新包 例如名为的 Windows 更新包KB2919355 https support microsoft com en us kb 2919355 是否存在内置功能来检查 如
  • 什么会导致 Debian Lenny 上的 php PDO mysql 出现间歇性 SQLSTATE[HY000] [2002] No such file or directory 错误? [复制]

    这个问题在这里已经有答案了 连接是通过 localhost 使用 mysqld sock 文件进行的 这些在 99 的时间内都可以工作 但在一些奇怪的条件下我收到错误 SQLSTATE HY000 2002 No such file or
  • 如何使用单元格中的自定义按钮删除 UITableView 中的单元格?

    我有 UITableView 我定制了像元高度 80 0f 我有 4 个标签 UILabel 和 1 个图像 UIImage 和 3 个按钮 UIButton 其中一个按钮是删除按钮 通过触摸图像上的单元格或按钮 播放按钮 视频将被加载并播
  • RuntimeException:您的内容必须具有 id 属性为“android.R.id.list”的 ListView

    我遇到运行时异常 java lang RuntimeException 您的内容必须有一个 ListView 其 id 属性是 android R id list 我不知道出了什么问题 Override public void onCrea
  • 计算过程中出现错误信息

    任何人 请看一下我的代码行 int totalValue 0 totalValue int Parse Label9 Text int Parse Label6 Text Label8 Text totalValue 为什么我收到错误消息
  • 尝试配置 YouTube 订阅按钮回调

    下面是我尝试过的代码片段
  • Type.GetType 不起作用[重复]

    这个问题在这里已经有答案了 我刚刚注意到该函数中存在一个错误 Type GetType System Uri 返回值为 null 而以下函数运行良好 Type GetType System string Type GetType Syste
  • matplotlib:为什么使用 pyplot.setp() 设置网格会导致错误?

    这个问题与这个不同post https stackoverflow com q 53716165 10253483 它正在讨论设置网格的其他方法 而不是使用 pyplot setp matplotlib pyplot setp 可用于设置所
  • 使用 Facebook 帐户登录网站 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在我们当前的网站中实现 SSO 以便我们可以使用 Facebook 帐户登录该网站 您能否提供我需要遵循的实施步骤 Mixu在他的
  • 将 C# 控制台应用程序位置设置为辅助屏幕

    概述 我正在开发一个涉及 WCF 和多种类型客户端的项目 我创建了几个测试客户端 并且有一个托管在控制台应用程序中的 WCF 这导致我在调试时有多个应用程序窗口 我目前有 4 个 并且每次运行它们时我都必须将它们排列在多个屏幕上 我有 2
  • 重现日志中的表格和图表

    我是一名外科医生 喜欢编码 我尽力使 R 的编码适合我的论文 但在表创建方面遇到问题 我在著名期刊 NEJM 上找到了表格和绘图组合 它看起来像这样 我怎样才能重现这种表格和森林图的组合R 这个怎么样 与ggplot2 and grid 我
  • 在集群中共享 Java 同步块,还是使用全局锁?

    我有一些代码只想允许一个线程访问 我知道如何使用以下任一方法来完成此操作synchronized块或方法 但这可以在集群环境中工作吗 目标环境是WebSphere 6 0 集群中有2个节点 我有一种感觉synchronized行不通 因为每
  • 如何在Python中恢复中断的FTP上传

    我需要手动中断 FTP 上传 然后测试是否可以恢复上传 我正在使用 Python 的 ftplib 模块 我试过下面的代码 Consider I have logged in using valid ftp user File is of