2010-07-12 120 views
7

我使用ftplib傳輸文件。一切都很好。現在我試圖在下載之前獲取目標文件的大小。Python ftplib在下載之前無法獲取文件的大小?

  1. 首先,我試着用ftp.size(filename)獲得大小。服務器抱怨說,我不能在ASCII模式下做到這一點。

  2. 然後我嘗試使用ftp.sendcmd(「binary」)和ftp.sendcmd(「bin」)設置二進制模式。在這兩種情況下,服務器抱怨「500二進制不明白」

在這種情況下,ftplib可以在下載之前獲取文件的大小嗎?我不控制FTP服務器,不能改變它的行爲。

謝謝

回答

4

Ftplib可以在下載之前獲取文件的大小。由於文件說:

FTP.size(文件名) 請求 大小指定的服務器上的文件名的文件。 成功時,文件大小爲 作爲整數返回,否則返回無 。 注意大小 命令不規範,但 許多共同的服務器upported 實現

顯然您的服務器不支持此功能。

0

「服務器抱怨說我無法在ascii模式下執行此操作。」 - 嘗試顯示您使用的確切代碼和服務器響應的確切文本。使用複製/粘貼,不要從內存中鍵入。

您有權訪問命令行FTP客戶端嗎?如果沒有,得到一個。用它來試驗服務器可以做什麼。像REMOTEHELP這樣的客戶端命令是你的朋友。示例:

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

這表示我所連接的服務器將支持SIZE命令。

17

很晚回覆,但這裏是正確的答案。這適用於ProFTPD。

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

爲了完整起見:切換回ASCII使用'TYPE A' – ezdazuzena 2014-12-04 17:10:45