téléchargement de fichier
wisky
Membre
Comment faire pour télécharger un fichier et l'enregistrer sur le disque dur.
Il faut que je puissent récuperer les informations sur le fichier (taille) avant le début du téléchargement pour permettre le suivi du téléchargement. Il faut que les protocoles HTTP et FTP soit suportés.
Mais pour commencer comment ont fait pour télécharger? :why?:
Il faut que je puissent récuperer les informations sur le fichier (taille) avant le début du téléchargement pour permettre le suivi du téléchargement. Il faut que les protocoles HTTP et FTP soit suportés.
Mais pour commencer comment ont fait pour télécharger? :why?:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.apple.com"]]
Pour le téléchargement de "gros" fichiers (gestionnaire) tu peux utiliser NSURLDownload bout d'exemple : http://www.objective-cocoa.org/forum/index.php?topic=937.0
il ne montre que le code pour la progression. Je test
Je n'arrive pas à comprendre comment ça marche. Il faut que j'utilise NSURLDownload ou NSURLResponse?
Quel est la différence?
Pour lancer le téléchargement je doit utilisé quoi? :why?:
http://objective-cocoa.org/index.php?p=ressource_detail&id=9
Voici un exemple qui a fonctionné chez moi :
[tt]
{
NSURL *url;
NSURLRequest *req;
NSURLDownload *dl;
url=[NSURL URLWithString:@"ftp://ftp.apple.com/developer/!_About_Dev_Connection_ftp.txt"];
req=[NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5];
dl=[[NSURLDownload alloc] initWithRequest:req delegate:self];
if (dl) [dl setDestination:@/texte.txt allowOverwrite:YES];
}
[/tt]
.
je l'ai déjà et ça m'aide pour tester la connexion.
Merci Bru. Je comprend mieux maintenant.
Le téléchargement est lancé par un message dans ma class:
j'ai bien les deux NSLog qui s'affiche dans la console. Après il plante
En plus, tu n'as pas besoin de tester dl, puisque si tu as dl==nil, le message sera envoyé à rien du tout.
[tt]2005-08-10 13:13:53.248 xNetUpdate[760] http://www.monsite.com/u/f.zip
Program received signal:Â "EXC_BAD_ACCESS".
2005-08-10 13:13:53.299 xNetUpdate[760] /private/var/tmp/folders.501/TemporaryItems/file1.zip
Unable to disassemble objc_msgSend_rtp.
(gdb) [/tt]
comment faire pour tester si le fichier existe bien?
D'autre part, il est important que le delegate (ici self) soit aussi présent pendant le transfert (s'il est purgé, alors plantage).
Enfin, la doc précise qu'il y a des restrictions en multi-thread... Utilises tu plusieurs threads ?
.
non
même résultat
1- url est il bien créé ? (fais un [tt]NSLog(@%@';, url);[/tt] après URLWithString).
2- req est il bien créé ? (idem, un [tt]NSLog(@%@';, req);[/tt] après requestWithURL).
.
[tt]2005-08-10 13:44:04.748 xNetUpdate[842] http://www.monsite.com/u/f.zip
2005-08-10 13:44:04.749 xNetUpdate[842] http://www.monsite.com/u/f.zip
2005-08-10 13:44:04.749 xNetUpdate[842] <NSURLRequest http://www.monsite.com/u/f.zip>
2005-08-10 13:44:04.805 xNetUpdate[842] /private/var/tmp/folders.501/TemporaryItems/file1.zip
2005-08-10 13:44:04.806 xNetUpdate[842] OK[/tt]
J'ai l'impression qu'il est libéré trop top.
J'ai un outlet entre les 2 classes. Mais je ne l'utilise pas. J'envoi un message et puis plus rien après.
Le message "DownloadGo" lance la methode "runDownload".
J'ai du oublié une partie?
Telechar est le nom de l'outlet sur lequel est connecter ma class via IB.
Le résultat est "signal 10 (SIGBUS)". J'ai une alerte comme quoi "runDownload" n'existe pas. mais lors de l'exécution il la trouve
Tu as simplement dû oublier de déclarer runDownload: dans le .h de ta classe. Mais comme objC est dynamique, ça n'empêche pas l'exécution du programme par la suite.
Ceci est peu être normal : dans la décla de runDownload:, le paramètre est une notif NSNotification, or tu appelles cette méthode avec un paramètre qui ne semble pas être NSNotification (mais plutôt NSString).
.
ma fonction est bien déclaré dans mon fichier .h
maintenant il continue à planté mais il ne me fait plus d'erreur.
Voici le rapport de plantage de Mac Os X.4.2:
[tt]Date/Time:Â Â Â 2005-08-11 14:44:41.308 +0200
OS Version:Â Â Â 10.4.2 (Build 8C46)
Report Version: 3
Command: xNetUpdate
Path:Â Â /xNetUpdate/build/Release/xNetUpdate.app/Contents/MacOS/xNetUpdate
Parent:Â WindowServer [68]
Version: ??? (1.99b2)
PID:Â Â 1116
Thread: 0
Exception:Â EXC_BAD_ACCESS (0x0001)
Codes:Â Â Â KERN_INVALID_ADDRESS (0x0001) at 0x656d6963
Thread 0 Crashed:
0Â Â <<00000000>> 0xfffeff20 objc_msgSend_rtp + 32
1  com.apple.Foundation   0x92859708 NSPopAutoreleasePool + 536
2  com.apple.AppKit     0x93628414 -[NSApplication run] + 544
3  com.apple.AppKit     0x93718c1c NSApplicationMain + 452
4Â Â com.apple.xNetUpdate2Â Â 0x0000227c _start + 344 (crt.c:272)
5Â Â com.apple.xNetUpdate2Â Â 0x00002120 start + 60
Thread 1:
0  libSystem.B.dylib    0x9004ca38 syscall_thread_switch + 8
1  com.apple.Foundation   0x92895330 +[NSThread sleepUntilDate:] + 152
2  com.apple.AppKit     0x936c8e60 -[NSUIHeartBeat _heartBeatThread:] + 1100
3  com.apple.Foundation   0x9287cf34 forkThreadForFunction + 108
4  libSystem.B.dylib    0x9002c3d4 _pthread_body + 96
Thread 2:
0  libSystem.B.dylib    0x9000a778 mach_msg_trap + 8
1  libSystem.B.dylib    0x9000a6bc mach_msg + 60
2Â Â com.apple.CoreFoundation 0x9074b3d8 __CFRunLoopRun + 832
3Â Â com.apple.CoreFoundation 0x9074acdc CFRunLoopRunSpecific + 268
4  com.apple.Foundation   0x928a43e0 +[NSURLConnection(NSURLConnectionInternal) _resourceLoadLoop:] + 264
5  com.apple.Foundation   0x9287cf34 forkThreadForFunction + 108
6  libSystem.B.dylib    0x9002c3d4 _pthread_body + 96
Thread 3:
0  libSystem.B.dylib    0x9001efec select + 12
1Â Â com.apple.CoreFoundation 0x9075dc6c __CFSocketManager + 472
2  libSystem.B.dylib    0x9002c3d4 _pthread_body + 96
Thread 4:
0  libSystem.B.dylib    0x9000a778 mach_msg_trap + 8
1  libSystem.B.dylib    0x9000a6bc mach_msg + 60
2Â Â com.apple.CoreFoundation 0x9074b3d8 __CFRunLoopRun + 832
3Â Â com.apple.CoreFoundation 0x9074acdc CFRunLoopRunSpecific + 268
4  com.apple.Foundation   0x928a5520 +[NSURLCache _diskCacheSyncLoop:] + 152
5  com.apple.Foundation   0x9287cf34 forkThreadForFunction + 108
6  libSystem.B.dylib    0x9002c3d4 _pthread_body + 96
Thread 0 crashed with PPC Thread State 64:
 srr0: 0x00000000fffeff20 srr1: 0x000000000000d030            vrsave: 0x0000000000000000
  cr: 0x44000224     xer: 0x0000000000000004  lr: 0x0000000092859708 ctr: 0x0000000000000001
  r0: 0x0000000000000001  r1: 0x00000000bffff1f0  r2: 0x00000000656d6963  r3: 0x000000000036f460
  r4: 0x0000000090a16918  r5: 0x000000000000000c  r6: 0x000000000036f461  r7: 0x000000000000bdf0
  r8: 0x0000000000000001  r9: 0x000000000000a000 r10: 0x0000000000000de8 r11: 0x000000006f5f6918
  r12: 0x00000000003c0d2b r13: 0x0000000000000000 r14: 0x0000000000000000 r15: 0x0000000000000000
  r16: 0x0000000000000000 r17: 0x0000000000000000 r18: 0x0000000000000000 r19: 0x0000000000000000
  r20: 0x0000000000000000 r21: 0x0000000000000000 r22: 0x0000000000000000 r23: 0x0000000000000000
  r24: 0x0000000000000000 r25: 0x0000000000000000 r26: 0x0000000000000000 r27: 0x00000000a3668824
  r28: 0x0000000090a191a0 r29: 0x000000000036f460 r30: 0x00000000a3624078 r31: 0x0000000092859504
<EDIT>//JE fait un peut de ménage pour éviter d'abà®mer le site </edit>
Model: PowerBook4,3, BootROM 4.6.4f1, 1 processors, PowerPC 750Â (2.3), 900 MHz, 640 MB
Graphics: ATI Mobility Radeon 7500, ATY,RageM7, AGP, 32 MB
Memory Module: DIMM0/BUILT-IN, 128 MB, built-in, built-in
Memory Module: DIMM1/J12, 512 MB, SDRAM, PC133U-333
AirPort: AirPort, 9.52
Modem: MicroDash, Euro, V.92, 1.0F, APPLE VERSION 2.6.6
Network Service: Ethernet intégré, Ethernet, en0
Parallel ATA Device: Hitachi IC25N040ATMR04-0, 37.26 GB
Parallel ATA Device: SONY CD-RW/DVD-ROM CRX820E,
USB Device: USB Mouse, Logitech, Up to 1.5 Mb/sec, 500 mA
[/tt]
voici les fichiers de ma classe DownLoad qui doit me permettre de télécharger un fichier.
et voici dans mon fichier qui demande le lancement du téléchargement:
Dans le fichier .h du fichier demandant le téléchargement:
En debut de fichier après les autre #import:
puis la fonction lié à l'action sur le bouton télécharger:
:why?:
[Fichier joint supprimé par l'administrateur]
Tes objets enomerator, tempArray et dic te sont "donnés" par des méthodes qui ne sont PAS des initXXX ni un copy ni un retain. Donc, ce n'est PAS à toi de les libérer.
Tu peux tout simplement virer ces trois lignes, ces objets sont déjà garantis d'être autoreleasés. (t'avais pas des "multiple free" dans ta console, par hasard ?)
+
Chacha
Bon il ne plante plus, Merci Je suis trop nul <br />
Bon il ne télécharge pas plus mais je sais que le serveur répond. Il ne va pas plus loin. Je cherche...
Un grand merci à tous