我正在使用 ftplib 传输文件。一切都很好。现在我试图在下载之前获取目标文件的大小。
首先,我尝试使用 ftp.size(filename) 获取大小。服务器抱怨我不能在 ascii 模式下这样做。
然后我尝试使用 ftp.sendcmd("binary") 和 ftp.sendcmd("bin") 设置二进制模式。在这两种情况下,服务器都抱怨“500 二进制不理解”
在这种情况下,ftplib 可以在下载之前获取文件的大小吗?我不控制 FTP 服务器,也无法改变它的行为方式。
谢谢
很晚的回复,但这是正确的答案。这适用于 ProFTPD。
ftp.sendcmd("TYPE i") # Switch to Binary mode
ftp.size("/some/file") # Get size of file
ftplib 可以在下载前获取文件的大小。正如文档所说:
FTP.size(filename) 请求服务器上名为filename 的文件的大小。成功时,文件的大小以整数形式返回,否则返回 None。请注意,SIZE 命令不是标准化的,但许多常见的服务器实现都支持
显然您的服务器不支持此功能。
“服务器抱怨我不能在 ascii 模式下这样做。” -- 尝试显示您使用的确切代码和服务器响应的确切文本。使用复制/粘贴,不要从记忆中输入。
您可以访问命令行 FTP 客户端吗?如果没有,就买一个。用它来试验服务器可以做什么。像 REMOTEHELP 这样的客户端命令是您的朋友。例子:
ftp> remotehelp size
214 Syntax: SIZE <sp> pathname
这表明我连接的服务器将支持 SIZE 命令。