2010-07-12 16 views
7

Estoy usando ftplib para transferir archivos. Todo está funcionando bien. Ahora intento obtener el tamaño del archivo de destino antes de descargarlo.Python ftplib no puede obtener el tamaño del archivo antes de la descarga?

  1. Primero, intenté obtener tamaño con ftp.size (nombre de archivo). El servidor se quejó de que no puedo hacer eso en modo ascii.

  2. Intenté configurar el modo binario usando ftp.sendcmd ("binary") y ftp.sendcmd ("bin"). En ambos casos el servidor se quejó "500 binario no entiende"

Puede ftplib obtener el tamaño de un archivo antes de descargarlo en este caso? No controlo el servidor FTP y no puedo cambiar la forma en que se comporta.

Gracias

Respuesta

4

ftplib puede obtener el tamaño de un archivo antes de descargarlo. A medida que la documentación dice:

FTP.size (nombre de archivo) Solicitud del tamaño de el archivo denominado nombre del archivo en el servidor. En caso de éxito, el tamaño del archivo es devuelto como un entero; de lo contrario, no se devuelve ninguna . Tenga en cuenta que el comando TAMAÑO no es estándar, pero es upported por muchos servidor común implementaciones

Al parecer, su servidor no soporta esta característica.

0

"El servidor se quejó de que no puedo hacer eso en modo ascii". - Intenta mostrar el código exacto que usaste Y el texto exacto de la respuesta del servidor. Use copiar/pegar, no escriba desde la memoria.

¿Tiene acceso a un cliente FTP de línea de comando? Si no, consigue uno. Úselo para experimentar con lo que el servidor puede hacer. Un comando de cliente como REMOTEHELP es tu amigo. Ejemplo:

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

Esto indica que el servidor al que estaba conectado admitirá un comando SIZE.

17

Última respuesta, pero esta es la respuesta correcta. Esto funciona con ProFTPD.

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

Para completar: para volver a ASCII use 'TYPE A' – ezdazuzena

Cuestiones relacionadas