Python ftplib无法在下载文件之前获取文件大小?

12
我正在使用ftplib传输文件,一切都很好。现在我想在下载之前获取目标文件的大小。
  1. 首先,我尝试使用ftp.size(filename)获取文件大小。服务器报告说我不能在ASCII模式下这样做。

  2. 然后我尝试使用ftp.sendcmd("binary")和ftp.sendcmd("bin")设置二进制模式。在两种情况下,服务器都报告“500 binary Not understood”

在这种情况下,ftplib能否获取文件的大小?我无法控制FTP服务器并更改其行为。
谢谢
3个回答

27

非常晚的回复,但这是正确答案。这适用于ProFTPD。

ftp.sendcmd("TYPE i")    # Switch to Binary mode
ftp.size("/some/file")   # Get size of file

5
为了完整起见:要切换回 ASCII,请使用“TYPE A”。 - ezdazuzena
也适用于pyftpdlib服务器。 - rayzinnz

4

Ftplib可以在下载文件之前获取文件的大小。正如文档所述:

FTP.size(filename) 请求服务器上名为filename的文件的大小。 成功后,文件大小将作为整数返回;否则会返回 None。 请注意,SIZE命令没有标准化,但被许多常见的服务器实现支持

显然你的服务器不支持这个特性。


0
"

服务器抱怨我不能在ASCII模式下执行该操作。" - 尝试展示您使用的确切代码和服务器响应的确切文本。请使用复制/粘贴,不要凭记忆输入。

您是否可以访问命令行FTP客户端?如果没有,请获取一个。使用它来尝试服务器可以执行的操作。像REMOTEHELP这样的客户端命令是您的朋友。例如:

"
ftp> remotehelp size
214 Syntax: SIZE <sp> pathname

这表示我连接的服务器将支持SIZE命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接