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