12
votes

Python FTplib ne peut pas obtenir la taille du fichier avant le téléchargement?

J'utilise FTPLIB pour transférer des fichiers. Tout fonctionne bien. Maintenant, j'essaie d'obtenir la taille du fichier cible avant de télécharger.

  1. Tout d'abord, j'ai essayé de recevoir une taille avec ftp.size (nom de fichier). Serveur s'est plaint de savoir que je ne peux pas le faire en mode ASCII.

  2. Puis j'ai essayé de définir le mode binaire à l'aide de ftp.sendcmd ("binaire") et ftp.sendcmd ("bin"). Dans les deux cas, le serveur s'est plaint "500 binaires non compris"

    FTPLIB peut-il obtenir la taille d'un fichier avant de télécharger dans ce cas? Je ne contrôle pas le serveur FTP et je ne peux pas changer comment cela se comporte.

    merci


0 commentaires

3 Réponses :


4
votes

FTPLIB peut obtenir la taille d'un fichier avant de télécharger. Comme la documentation indique:

ftp.size (nom de fichier) Demander la taille de Le fichier nommé nom de fichier sur le serveur. Sur le succès, la taille du fichier est retourné comme un entier, sinon aucun est retourné. Notez que la taille la commande n'est pas standardisée, mais est soutenu par de nombreux serveurs communs Implémations

Apparemment, votre serveur ne prend pas en charge cette fonctionnalité.


0 commentaires

0
votes

"serveur s'est plaint de savoir que je ne peux pas le faire en mode ASCII." - Essayez de montrer le code exact que vous avez utilisé et du texte exact de la réponse du serveur. Utilisez Copy / Coller, ne tapez pas de la mémoire.

Avez-vous accès à un client FTP de ligne de commande? Sinon, en obtenir un. Utilisez-le pour expérimenter ce que le serveur peut faire. Une commande client comme RemoteHelp est votre ami. Exemple: xxx

ceci indique que le serveur auquel j'ai été connecté prendra en charge une commande taille.


0 commentaires

26
votes

réponse très tardive, mais voici la bonne réponse. Cela fonctionne avec le proftapd.

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


1 commentaires

Par souci de complétude: pour revenir à ASCII, utilisez type A