Gambas France BETA


Pas de compte ? Incription

[Resolu] comment télécharger des fichiers

Ce sujet est résolu.

12
AuteurMessages
masterrsi#1 Posté le 13/2/2011 à 12:22:00
Bonjour !

Dans mon application je vais faire :

un bouton télécharger qui va me télécharger des fichiers situant dans mon disque dur et je sais pas comment faire ca aidez moi sVp

Merci d'avance!!
manu#2 Posté le 13/2/2011 à 12:32:00
Avec Gambas ca roule !Bonjour et bienvenu,

Peut tu preciser ta question, car là, c'est un peu vague ! :tongue:

Ces fichiers, ils sont ou ? C'est pour les lire, les déplacer ?? quels type de fichiers ? Quel est le but en gros du traitement ?

cf Bonnes habitudes 7 et 8 ;)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
masterrsi#3 Posté le 13/2/2011 à 14:11:00
Salut ,
Mon projet est autour les réseaux de capteurs ,et comme j'ai pas de capteurs réels (ces capteurs observent des phénomènes physiques et envoient des mesures vers un serveur) je vais utiliser des fichiers excel ,donc mon serveur télécharge ces donneés pour faire des traitements (agrégation pr éliminer les données doubles) , comment faire ça ?
Merci encore
:)
manu#4 Posté le 13/2/2011 à 14:46:00
Avec Gambas ca roule !T'as pas d'autres format que des fichiers excel ? des fichiers texte par exemple ? Ils sont sur un serveur Web ces fichiers ?

Si c'est le cas, voila un peu de code ici provenant de la Doc officielle.

1
PUBLIC SUB getfile() 'How to download a file from the internet synchronously 'On 2007-jun-17, Daniel Compos noted that for Gambas v 1.9.49+: ' Put the "Async" PROPERTY set TO FALSE prior TO Get(), that way ' Get() will STOP the program flow UNTIL all the information IS ' received. In that CASE you should USE also the "TimeOut" PROPERTY TO ' set a timeout, IF NOT, it could hang forvever IF the server does NOT ' reply properly. DIM h AS HttpClient DIM buffer AS String h = NEW HttpClient AS "h" h.URL = "[url=http://elinks.or.cz/]http://elinks.or.cz/[/url]" h.Async = FALSE h.Timeout = 60 h.Get PRINT "begin" IF h.Status<0 THEN PRINT "ERROR" ELSE ' Success - read the data IF Lof(h) THEN READ #h, buffer, Lof(h) PRINT buffer END IF PRINT "end"END


Mais je ne suis pas sure que ce soit cela que tu recherches ! :geek:
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
masterrsi#5 Posté le 13/2/2011 à 20:21:00
Salut !
Merci manu :D pour ton aide je vais voir si ca marche
Gamuti#6 Posté le 9/3/2011 à 08:28:00
Pour télécharger des fichiers, il y a wget en ligne de commande.
Pour l'utiliser dans un programme gb, il faudra simplement faire :
1
SHELL "wget [url=http://siteinternet.com/FichierATelecharger.png]http://siteinternet.com/FichierATelecharger.png[/url]" WAIT


Le SHELL permet d'ouvrir une instance en ligne de commande (ça sert aussi à acheter du carburant)
et le WAIT permet d'attendre la fin d'exécution du SHELL pour rendre la main à l'utilisateur.
On peut tout à fait se passer du WAIT. Dans ce cas, le shell rend la main à l'utilisateur et ton fichier se télécharge de façon asynchrone et ton programme continue de s'exécuter.

Je te donnerai, à mon retour de Marseille dès ce week-end, la combine qui permet de récupérer le niveau de téléchargement en pourcentage, et d'indiquer l'emplacement du fichier téléchargé sur le disque dur.

Mais dès à présent, tu peux potasser la document de WGET.

Pour ce faire, un petit man wget ne devrait pas faire de mal.
masterrsi#7 Posté le 10/3/2011 à 10:41:00
Merci beaucoup Gamuti !
je vais essayer ça et dés j'ai des problèmes je tiendrai au courant
Merci encore une fois
masterrsi#8 Posté le 10/3/2011 à 15:02:00
salut !
j'ai essayé la cammande suivante pour télécharger par exemple une image :
SHELL "wget http://www.megaupload.com/?d=LQJPM06G/barrage.jpg"]megaupload.com LQJPM06G/barrage.jpg"[/url] WAIT
Mais l'image ne s'affiche pas
et quand j'ai fais
SHELL "wget http://www.megaupload.com/?d=LQJPM06G"]megaupload.com LQJPM06G"[/url] WAIT elle m'affiche le lien de téléchargement mais j'ai voulu que l'image soit téléchargée automatiquement sans passer par le lien de téléchargement
je sais pas si je suis claire puisque je suis débutante en gambas et linux
Merci !!!
spheris#9 Posté le 11/3/2011 à 09:05:00
masterrsi,

SHELL "wget megaupload.com LQJPM06G/barrage.jpg" WAIT n'est pas un lien d'adresse internet valide. Il doit etre du type :

http://monsite.com/monimage.jpg

exemple de commande :
1
DIM mypicture AS PictureEXEC["wget","[url=http://uploads.siteduzero.com/files/138001_139000/138169.png]http://uploads.siteduzero.com/files/138001_139000/138169.png[/url]"]mypicture = picture["138169.png"]


et là cela doit marcher.
;) ;)
jeanyvon#10 Posté le 11/3/2011 à 15:27:00
Gambas? Ma! Et gustohello!
il y a aussi peut être une histoire de droit... Peu d'images sont libres! Il y a peut être une protection contre le téléchargement!
A+
JY
Vieillir? On peut retarder mais pas y échapper!
masterrsi#11 Posté le 11/3/2011 à 17:52:00
Merci spheris !
ça marche très bien
Gamuti#12 Posté le 12/3/2011 à 16:30:00
Pour télécharger des fichiers, il y a wget en ligne de commande.
Pour l'utiliser dans un programme gb, il faudra simplement faire :
1
SHELL "wget [url=http://siteinternet.com/FichierATelecharger.png]http://siteinternet.com/FichierATelecharger.png[/url]" WAIT


Le SHELL permet d'ouvrir une instance en ligne de commande (ça sert aussi à acheter du carburant)
et le WAIT permet d'attendre la fin d'exécution du SHELL pour rendre la main à l'utilisateur.
On peut tout à fait se passer du WAIT. Dans ce cas, le shell rend la main à l'utilisateur et ton fichier se télécharge de façon asynchrone et ton programme continue de s'exécuter.

Je te donnerai, à mon retour de Marseille dès ce week-end, la combine qui permet de récupérer le niveau de téléchargement en pourcentage, et d'indiquer l'emplacement du fichier téléchargé sur le disque dur.

Mais dès à présent, tu peux potasser la document de WGET.

Pour ce faire, un petit man wget ne devrait pas faire de mal.


Chose promise, chose dûe,
Voici la suite du tuto sur le wget ou comment télécharger graphiquement un fichier quelconque sur le net (sauf megaupload qui empêche le téléchargement direct) :
1
SHELL "wget [url=http://siteinternet.com/FichierATelecharger]http://siteinternet.com/FichierATelecharger[/url] -P /machin/ -o /tmp/pb1.txt"TestDuTelechargement

Où :
-P /machin/ est le dossier sur le disque dur où sera stocké le fichier téléchargé
-o /tmp/pb1.txt est un fichier temporaire, contenant le retour de la console généré par wget, situé dans le répertoire temporaire /tmp
TestDuTelechargement est une routine qui récupère la barre d'avancement (voir ci-dessous)

Ensuite, pour récupérer la barre d'avancement :
1
SUB TestDuTelechargement()DIM hFile AS FileDIM chaine AS StringDIM v AS IntegerDIM numligne AS IntegerDIM a AS INTEGER numligne = 0 v = 0 Label3.Text = "0" Label2.Text = "0" Erreur.Text = ""DO WHILE NOT Exist("/tmp/pb1.txt") 'On test l'existence du fichier temporaireLOOPFOR a = 0 TO 1 WAIT 1NEXTWAIT DO WHILE Label3.text <> "100" 'On test la fin du téléchargement hFile = OPEN "/tmp/pb1.txt" FOR INPUT numligne = 0 WHILE NOT Eof(hFile) LINE INPUT #hFile, chaine IF Right(chaine, 23) = "Nom ou service inconnu." THEN BREAK IF Right(chaine, 13) = "403 Forbidden" THEN BREAK IF Right(chaine, 13) = "404 Not Found" THEN BREAK IF Right(chaine, 34) = "Établissement de session erroné." THEN BREAK IF Right(chaine, 55) = "Connexion terminée par expiration du délai d'attente." THEN BREAK numligne = numligne + 1 Label2.Text = chaine IF v = 100 THEN Label3.Text = "100" IF Mid(chaine, 7, 2) = "K " AND Len(chaine) <= 78 AND Len(chaine) >= 75 THEN Label3.Text = Mid(chaine, 63, 3) IF CInt(Label3.Text) > v THEN 'On incrémente la barre de progression v = CInt(Labt) ProgressBar2.Value = CInt(Label3.Text) / 100 END IF ELSE WAIT ENDIF WEND CLOSE #hFile Erreur.Text = "" IF v = 100 THEN Label3.Text = "100" IF Right(chaine, 23) = "Nom ou service inconnu." THEN PRINT "Impossible de télécharger le jeu demandé." PRINT "Pas de connexion réseau" PRINT "Sortie du sous-programme TestDuTelechargement()." Erreur.Text = "ERREUR" BREAK END IF IF Right(chaine, 13) = "403 Forbidden" THEN PRINT "Impossible de télécharger le jeu demandé." PRINT "Le serveur refuse l'accès au fichier. Erreur 403" PRINT "Sortie du sous-programme TestDuTelechargement()." Erreur.Text = "ERREUR" BREAK END IF IF Right(chaine, 13) = "404 Not Found" THEN PRINT "Impossible de télécharger le jeu demandé." PRINT "Le fichier n'est plus disponible sur le serveur. Erreur 404" PRINT "Sortie du sous-programme TestDuTelechargement()." Erreur.Text = "ERREUR" BREAK END IF IF Right(chaine, 34) = "Établissement de session erroné." THEN PRINT "Établissement de session erroné." PRINT "Sortie du sous-programme TestDuTelechargement()." Erreur.Text = "ERREUR" BREAK END IF IF Right(chaine, 55) = "Connexion terminée par expiration du délai d'attente." THEN PRINT "Impossible de se connecter au serveur distant - Timeout." PRINT "Sortie du sous-programme TestDuTelechargement()." Erreur.Text = "ERREUR" BREAK END IF LOOP SHELL "rm -r /tmp/pb1.txt" '--- Suppression du fichier temporaire ---END


Nota 1 :
Ce bout de code est extrait de mon logiciel The Doom Launcher toujours disponible sur mon site internet :
http://games.utilities.free.fr/doom
Ce bout de code est adapté à l'utilisation que j'en fait mais peut-être qu'il vous sera nécessaire de modifier par-ci par-là, le code.
Pour afficher la barre d'avancement, il vous faudra :
- Label3.Text
- Label2.Text
- Erreur.Text (pas nécessaire si vous n'avez pas besoin de récupérer les codes d'erreurs)
- ProgressBar2

Nota 2 :
Il y a un petit défaut dans ce code : il ne rend pas la main à l'utilisateur. Ce qui induit un grisage de la fenêtre si le fichier à télécharger est gros.
masterrsi#13 Posté le 12/3/2011 à 23:14:00
Merci beaucoup beaucoup !
je vais essayer tout ce que vous m'avez dit et je vous tienderai au courant si j'aurai des problèmes
Merci encore un fois :D
masterrsi#14 Posté le 15/3/2011 à 22:04:00
Salut!
j'ai toujours des problèmes :roll:
je n'arrive pas à comprendre Pourquoi quand je uploade un fichier de format .txt dans le site de 4shared et quand je récupere le lien il me mettra en format html donc je dois accéder à mon navigateur pour le télécharger !!
spheris#15 Posté le 16/3/2011 à 07:54:00
masterrsi,
regarde de plus près le lien que tu vas télécharger.
Par exemple lorsque je tape :
1
wget [url=http://gambaslinux.eg2.fr/img/textarea/textarea-0.0.2.tar.gz]http://gambaslinux.eg2.fr/img/textarea/textarea-0.0.2.tar.gz[/url]

nous constatons bien que le fichier téléchargé est de type tar.gz

par contre, souvent, les sites de téléchargement ne mettent pas le lien direct mais une page qui te renvoi au téléchargement. ce qui explique que tu enregistres la page et non la cible demandée.

un exemple sur ce site :
http://www.01net.com/telecharger/linux/Bureautique/fiches/102082.html

le bouton télécharger te renvoi sur une page de pub + lancement du téléchargement.
;) ;)
12