如何在Python中通过FTP协议远程上传与下载文件?

落丽吖_7300

落丽吖_7300

2026-07-06

814人浏览

原创

530错误表示FTP登录认证失败,主因是用户名密码错误、账户禁用、主动/被动模式不匹配、IP限制或SSL/TLS配置冲突;需逐项核查凭证、账户状态、连接模式及加密设置。

如何在python中通过ftp协议远程上传与下载文件?

FTP连接失败:常见错误和认证绕过方式

直接用 ftplib.FTP 连接时,常遇到 530 Login authentication failed 或超时,根本原因通常是服务器启用了 FTPS(隐式/显式 TLS)或被动模式未正确启用。纯 FTP 明文协议在多数现代服务中已被禁用,必须确认目标是否支持 FTP 还是只接受 FTP_TLS。

  • 先尝试 FTP_TLS 替代 FTP,即使端口是 21;调用 ftp.login() 前必须执行 ftp.auth() 和 ftp.prot_p()
  • 若报错 425 Can't open data connection,大概率是防火墙或 NAT 阻断了被动模式端口 —— 必须调用 ftp.set_pasv(True)(默认值,但某些旧服务器需显式设为 True)
  • 用户名含 @ 符号(如邮箱)时,部分 FTP 服务会解析失败,改用 URL 编码或联系管理员确认认证格式

上传单个文件:二进制模式与路径陷阱

用 storbinary() 上传时,若文件内容乱码或体积异常(比如变小一半),基本是误用了文本模式。FTP 协议不自动转换换行符,所有文件都应以二进制方式传输。

  • 打开本地文件必须用 open(..., 'rb'),不能用 'r';传给 storbinary() 的回调函数参数名无关紧要,但数据块必须原样写入
  • 远程路径不要以 / 开头(除非明确是绝对路径),多数 FTP 服务器工作目录为用户根目录,storbinary('STOR uploads/report.pdf', f) 中的 uploads/report.pdf 是相对路径
  • 如果提示 553 Could not create file,检查目标目录是否存在 —— storbinary 不会自动创建父目录,需提前用 ftp.mkd() 或 ftp.cwd() 确保路径有效

下载文件并避免内存爆满

大文件(>100MB)直接用 retrbinary() 写入内存再保存,容易触发 MemoryError。必须流式写入磁盘,且注意回调函数中每次接收的数据块长度不可预设。

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
  • 使用 open(..., 'wb') 创建文件句柄,传给 retrbinary() 的回调函数负责 f.write(data),不要拼接字符串或 bytes
  • retrbinary() 的 blocksize 参数默认是 8192,对千兆网络可设为 65536 提升吞吐,但超过 1MB 可能引发部分服务器中断
  • 若下载后文件大小为 0,检查回调函数是否被定义但未执行 —— 常见于忘记传入回调(如写成 ftp.retrbinary('RETR x.log', None)),此时命令发出去但无数据接收

主动模式 vs 被动模式:什么时候必须改配置

内网机器上传失败、卡在 LIST 或 RETR 步骤,八成是主动模式(PORT)被路由器拦截。被动模式(PASV)由客户端发起所有连接,兼容性更好,但依赖服务器开放高位端口范围。

  • 绝大多数情况坚持用 ftp.set_pasv(True)(默认),仅当服务器明确要求主动模式且你有外网 IP+端口映射权限时,才设为 False
  • 某些企业 FTP 服务器限制 PASV 端口范围(如只开 50000–50100),需用 ftp.sendcmd('PBSZ 0') + ftp.sendcmd('PROT P') 配合防火墙策略
  • 调用 ftp.dir() 或 ftp.nlst() 前务必确认模式已生效 —— 模式切换不影响已建立的控制连接,但影响后续所有数据通道建立

FTP 协议本身没有原子性保证,上传中途断连不会自动回滚,生产环境必须加 MD5 校验或用 SIZE 命令比对远端文件长度。别指望 ftplib 自动重试 —— 这些都得自己写逻辑兜底。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1851

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4964

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1789

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

29797

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3547

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3567

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1223

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2763

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习