Python ftplib 无法在下载前获取文件大小?
我正在使用ftplib来传输文件,一切都运行得很好。现在我想在下载之前先获取目标文件的大小。
首先,我尝试用ftp.size(filename)来获取文件大小。结果服务器说我不能在ascii模式下这样做。
然后我尝试通过ftp.sendcmd("binary")和ftp.sendcmd("bin")来设置为二进制模式。但在这两种情况下,服务器都回应说“500 binary Not understood”,意思是它不理解这个命令。
在这种情况下,ftplib能在下载之前获取文件的大小吗?我无法控制FTP服务器,也不能改变它的行为。
谢谢
3 个回答
0
“服务器抱怨我不能在 ASCII 模式下这样做。”——试着把你用的确切代码和服务器的确切回应贴出来。直接复制粘贴,不要凭记忆输入。
你有命令行的 FTP 客户端吗?如果没有,去找一个。用它来试试服务器能做些什么。像 REMOTEHELP 这样的命令会对你很有帮助。举个例子:
ftp> remotehelp size
214 Syntax: SIZE <sp> pathname
这表示我连接的服务器支持 SIZE 命令。
4
Ftplib可以在下载文件之前获取文件的大小。文档中是这么说的:
FTP.size(filename) 请求获取服务器上名为filename的文件的大小。 如果成功,会返回文件的大小(一个整数),否则返回None。 请注意,SIZE命令并不是一个标准化的命令,但很多常见的服务器都支持这个功能。
显然,你的服务器不支持这个功能。
27
回复得有点晚,不过这里有个正确的答案。这适用于ProFTPD。
ftp.sendcmd("TYPE i") # Switch to Binary mode
ftp.size("/some/file") # Get size of file