12

我正在使用 ftplib 传输文件。一切都很好。现在我试图在下载之前获取目标文件的大小。

  1. 首先,我尝试使用 ftp.size(filename) 获取大小。服务器抱怨我不能在 ascii 模式下这样做。

  2. 然后我尝试使用 ftp.sendcmd("binary") 和 ftp.sendcmd("bin") 设置二进制模式。在这两种情况下,服务器都抱怨“500 二进制不理解”

在这种情况下,ftplib 可以在下载之前获取文件的大小吗?我不控制 FTP 服务器,也无法改变它的行为方式。

谢谢

4

3 回答 3

27

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

ftp.sendcmd("TYPE i")    # Switch to Binary mode
ftp.size("/some/file")   # Get size of file
于 2011-03-09T05:51:55.687 回答
4

ftplib 可以在下载前获取文件的大小。正如文档所说:

FTP.size(filename) 请求服务器上名为filename 的文件的大小。成功时,文件的大小以整数形式返回,否则返回 None。请注意,SIZE 命令不是标准化的,但许多常见的服务器实现都支持

显然您的服务器不支持此功能。

于 2010-07-12T20:34:46.697 回答
0

“服务器抱怨我不能在 ascii 模式下这样做。” -- 尝试显示您使用的确切代码和服务器响应的确切文本。使用复制/粘贴,不要从记忆中输入。

您可以访问命令行 FTP 客户端吗?如果没有,就买一个。用它来试验服务器可以做什么。像 REMOTEHELP 这样的客户端命令是您的朋友。例子:

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

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

于 2010-07-12T22:08:25.950 回答