Length d'un fichier à  distance

09:58 modifié dans API AppKit #1
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

Réponses

  • elfelf Membre
    09:58 modifié #2
    Pourquoi ne veut tu pas utiliser les NSDownload?

    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
  • 09:58 modifié #3
    J'ai déjà  expliqué sur Macfr que le temps de connexion est très chiant surtout en 56K
    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 ?
  • elfelf Membre
    09:58 modifié #4
    Demande leurs...
  • BruBru Membre
    09:58 modifié #5
    dans 1142354495:

    J'ai déjà  expliqué sur Macfr que le temps de connexion est très chiant surtout en 56K
    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 :
    <br />{<br />&nbsp; &nbsp; NSURL *url=[NSURL URLWithString:@&quot;ftp://domaine/fichier.dat&quot;];<br />&nbsp; &nbsp; NSString *prop=[url propertyForKey:@&quot;content-length&quot;];<br />&nbsp; &nbsp; int taille=[prop intValue];<br />}<br />
    


    Je ne sais pas si ça va marcher cependant... A tester !

    .
  • AliGatorAliGator Membre, Modérateur
    09:58 modifié #6
    Pour le FTP c'est différent, il existe une commande en FTP pour récupérer le listing complet d'un dossier (un peu un "ls -a") qui te fournit les droits sur chaque fichiers, ainsi que leur taille, etc.

    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.
  • 09:58 modifié #7
    T'es un champion Bru ! ça a l'air de marcher,
    j'approfondi ça demain ;)
  • AliGatorAliGator Membre, Modérateur
    09:58 modifié #8
    Ouah, trop fort :)

    Mais dis moi Bru, t'as trouvé ça comment, le nom magique de la property ?
    Comment t'as su que c'était content-length ?
  • BruBru Membre
    09:58 modifié #9
    dans 1142356314:

    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.


    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 !

    .
  • AliGatorAliGator Membre, Modérateur
    mars 2006 modifié #10
    dans 1142410297:

    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 !
    C'est ça rigole, rigole, moque toi  :) ;)
    Mais si j'ai précisé ça c'était surtout pour EagleLouk qui avait l'air de ne pas être au courant :
    dans 1142354495:
    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 ?
    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  :)
  • BruBru Membre
    09:58 modifié #11
    dans 1142415357:

    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]
    .
  • AliGatorAliGator Membre, Modérateur
    09:58 modifié #12
    Oui en même temps quand tu te connectes au FTP, le client FTP demande en général au serveur FTP quel est le type de serveur installé (quel type d'OS, quel serveur ftp...).
    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 :D

    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.
  • Eddy58Eddy58 Membre
    09:58 modifié #13
    dans 1142378091:

    Mais dis moi Bru, t'as trouvé ça comment, le nom magique de la property ?
    Comment t'as su que c'était content-length ?

    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à  ? ;)
  • elfelf Membre
    09:58 modifié #14
    Je pense que c'est normale que ils ne soient pas listé dans la doc: ca n'a rien a voir avec cocoa mais c'est bien un header http. Mais c'est surement mentionné dans la doc http.

    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!
  • 09:58 modifié #15
    Défonce-le bru ! défonce-le !
  • aranaudaranaud Membre
    09:58 modifié #16
    dans 1142451838:

    Défonce-le bru ! défonce-le !

    Je ne pensai pas que Cocoa puisse provoquer aussi des cas de violences.  >:)
  • AntilogAntilog Membre
    09:58 modifié #17
    Une bonne tasse de chocolat pour se calmer??

    ::)
Connectez-vous ou Inscrivez-vous pour répondre.