Length d'un fichier à distance
Bonsoir,
Je cherche à obtenir la taille d'un fichier distant (sur le web) avec une simple URL
Sachant que j'ai bcp d'URL à valider, je ne veux pas utiliser le NSURLDownload et récuperer la taille du fichier lors de la réponse (download:didReceiveResponse:).
Alors comment faire ?
Merci d'avance,
Louka
Je cherche à obtenir la taille d'un fichier distant (sur le web) avec une simple URL
Sachant que j'ai bcp d'URL à valider, je ne veux pas utiliser le NSURLDownload et récuperer la taille du fichier lors de la réponse (download:didReceiveResponse:).
Alors comment faire ?
Merci d'avance,
Louka
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Sinon tu peux toujours creer une classe perso qui fait ca avec les NSDownloads et qui renvoie le resultat par une methode de delegate a la classe initiale
Je ne sais pas comment fonctionne les gestionnaires FTP mais par exemple "Transmit", il indique le poids de chaque fichiers.. Ne me dites pas que c'est un NSURLDownload à chaque fois ?
As tu essayé avec juste ton url et en demandant la propriété "content-length" ?
Par exemple :
Je ne sais pas si ça va marcher cependant... A tester !
.
Il ne faut pas oublier que FTP = File Transfer Protocole = protocole qui a été mis au point exprès pour le transfert de fichiers. Donc il y a tout ce qui faut avec.
Alors qu'en HTTP, il y a très peu de choses de ce côté. une commande HEAD au lieu de GET à la limite, mais sans beaucoup plus.
j'approfondi ça demain
Mais dis moi Bru, t'as trouvé ça comment, le nom magique de la property ?
Comment t'as su que c'était content-length ?
Ah bon ? ? ?
C'est que je savions point que FTP c'tait pô la même chose que HTTP...
J'va m'coucher moins con ce soir !
.
Mais si j'ai précisé ça c'était surtout pour EagleLouk qui avait l'air de ne pas être au courant : Donc pour re-répondre à EagleLouk, Transmit c'est pas un NSURLDownload ou quoi, il demande juste un listing du répertoire, listing qui indique aussi la taille des fichiers, puisqu'il y a ça de prévu dans les commandes FTP... contrairement à HTTP.
--> Donc Eagle, la méthode pour récupérer la taille d'un fichier du coup n'a rien à voir, il en faut pas te fier à Transmit ou autre !
Oui je sais j'aurais dû faire le QUOTE dès ma première réponse
Mais non Bru je ne te prennais pas pour un :)beta: .... C'est EagleLouk que je prennais pour un :)beta: ;D :brule: oups, je sors
A propos de :)beta: , sais-tu que la commande FTP ls est complètement dépendante du type de serveur vers lequel elle est émise ?
Chaque type de serveur FTP renverra son propre format en résultat : bonjour le parsing pour récupérer l'info "taille du fichier"...
Pour info, voici le résultat de 3 ls -al, chacun vers un serveur FTP bien différent :
Le premier :
[tt]
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
03-15-06 09:51AM 1975 11011270-echantillon.txt
03-15-06 09:51AM 2775 11011270-prelevement.txt
03-14-06 08:39PM 4717 11011356-echantillon.txt
03-14-06 08:39PM 5401 11011356-prelevement.txt
03-15-06 09:08AM 309 11211281-echantillon.txt
03-15-06 09:08AM 1011 11211281-prelevement.txt
03-15-06 10:42AM 233 11211413-echantillon.txt
03-15-06 10:42AM 769 11211413-prelevement.txt
11-24-04 11:06AM 1366 cris_prelev.bat
03-14-06 08:31PM <DIR> save
226 Transfer complete.
ftp : 621 octets reçus en 0,00 secondes à 621000,00 Ko/sec.
[/tt]
Le second :
[tt]
200 PORT subcommand request successful.
125 List started.
QPGMR 118784 21/06/04 16:52:28 *FILE FANCSTP1
QPGMR *MEM FANCSTP1.FANCSTP1
QPGMR 143360 22/06/04 13:37:38 *FILE FANCSTP1SV
QPGMR *MEM FANCSTP1SV.FANCSTP1
250 List completed.
ftp : 266 octets reçus en 0,00 secondes à 266000,00 Ko/sec.[/tt]
Et le troisième :
[tt]
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 (?) (?) 13437 Sep 24 20:59 11.jpg
-rw-r--r-- 1 (?) (?) 9770248 Sep 17 00:31 Chausey-dauphin.mpg
-rw-r--r-- 1 (?) (?) 108761 Jan 5 2005 MYSQL-cocoa-v2.zip
-rw-r--r-- 1 (?) (?) 107232 Jan 5 2005 MYSQL-cocoa-v3.zip
-rw-r--r-- 1 (?) (?) 110829 Jan 5 2005 MYSQL-cocoa.zip
drwxr-xr-x 2 (?) (?) 496 Nov 19 00:18 aniv dominique 03.07.05
-rw-r--r-- 1 (?) (?) 20 Jan 5 2005 index.html
-rw-r--r-- 1 (?) (?) 273539 Oct 16 02:43 photolou.jpg
226-Transfer complete.
226 Votre site web occupe actuellement 24.68 sur 100.00 Mo d'espace disque.
ftp : 577 octets reçus en 0,00 secondes à 577000,00 Ko/sec.
[/tt]
.
Et c'est justement le boulot du client FTP de se démerder dans tout ça.
C'est pas pour rien qu'on a des programmes de clients FTP, ils ne font pas que rajouter une interface graphique bête et méchante faut bien qu'ils aient un peu de boulot
Et puis poru être précis ce n'est pas la commande "ls -a" qui est executée à proprement parler, mais la commande RAW FTP "LIST". Bon il n'empêche que ça ne change pas la donne, et que oui le parsing de tel résultat n'est pas de la tarte, mais c'est aussi pour ça qu'il y a des RFC
Enfin bon ce n'est pas le débat ici, le but était juste de dire que c'est pas parce que Transmit, client FTP, arrive à récupérer rapidement la taille de toute une liste de fichiers que EagleLouk pourra aussi facilement récupérer la taille d'un fichier au bout d'une URL HTTP.
Intéressante question, les property keys ne sont en effet pas listées dans la doc. content-length est présent dans le fichier httpheaders.h, peut-être la magie est-elle là ?
De plus c'est possible de récupérer de cette manière (d'après ce que j'ai compris) nimporte quel header http. par exemple le code resultat, (200, 401, 403, 404, 500 pour les plus communs, comme ça tu peux voir si tu as une erreur "non trouvée" (404) "interdit" (403) "requiert authentification" (401 je crois) "erreur interne au serveur" (500) et "tout va bien" (200). ou une redirection (Location), ou le type MIME (content-type) etc.
ça peut ce révéler très utile!
Je ne pensai pas que Cocoa puisse provoquer aussi des cas de violences.
::)