Menu

Télécharger un fichier depuis un serveur FTP

Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
- - Dernière réponse : yg_be
Messages postés
7421
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2019
- 18 févr. 2019 à 20:52
Bonsoir,

Je souhaite ajouter une fonction à mon logiciel qui lui permet de se mettre à jour en téléchargeant un zip de mon serveur FTP.
Pour se faire, j'utilise ce code :

Try
            My.Computer.Network.DownloadFile("ftp://serveurFTP", "C:\Windows\Temp\Fichier.zip", "NomUtilisateur", "MotDePasse")
            Me.Hide()
            Form3.Show()
        Catch ex As Exception
            Download()
        End Try


Le téléchargement se lance sans problèmes, mais se coupe au bout d'un certain temps et le logiciel plante...

Que puis-je faire ?

Merci !

Jojorealisateur
Afficher la suite 

Votre réponse

2 réponses

Messages postés
12163
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
14 février 2019
2444
0
Merci
Bonjour,

Je ne connais rien en VB, mais je peux te suggérer une solution en batch MS-DOS :

curl --output Fichier.zip -C - -# -u "user:password" "ftp://adresse:21/Fichier.zip"

Il suffit de télécharger cURL ici : https://curl.haxx.se/download.html



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
jojorealisateur
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
1 -
Bonjour Barnabe0057,

Merci pour votre réponse. J'ai déjà cherché du côté du batch, mais je ne suis pas très chaud de télécharger une commande externe...

Le problème n'est pas le téléchargement en lui-même, le fichier se télécharge. Le problème est que le téléchargement se lance puis le logiciel passe directement en mode "dé-zippage" et le téléchargement s'interrompt puis le logiciel plante...

Enfin, merci beaucoup !

Jojorealisateur
barnabe0057
Messages postés
12163
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
14 février 2019
2444 > jojorealisateur
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
-
Ce n'est pas n'importe quelle commande externe, c'est un véritable couteau suisse pour les protocoles HTTP et FTP. C'est une commande très réputée et c'est celle dont je me sers le plus.

Je ne comprend pas si ton 2ème paragraphe fait référence à cURL ou bien à ton problème initial.
yg_be
Messages postés
7421
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2019
438 > jojorealisateur
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
-
tu écris:
le fichier se télécharge. Le problème est que le téléchargement se lance puis le logiciel passe directement en mode "dé-zippage" et le téléchargement s'interrompt puis le logiciel plante...
quel est le problème? le fichier est téléchargé. est-ce le dézippage que tu veux éviter? quel logiciel se plante avec quel code d'erreur ou quelle exception?
Commenter la réponse de barnabe0057
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
1
0
Merci
Bonjour,

Désolé de ne pas avoir été clair dans mon message précédant... Il est vrai que j'étais un peu fatigué quand je l'ai écrit...

Donc, pour être sûr d'être clair cette fois, voici le principe de fonctionnement de mon logiciel. Je tiens à préciser que c'est un logiciel secondaire installé en même temps que mon logiciel principal et qui permet de mettre ce dernier à jour automatiquement.

1 - Téléchargement d'un fichier zip depuis mon serveur FTP.
2 - Dé-zippage de ce fichier
NB : Le zip contient les nouveaux fichiers qui vont remplacer ceux à mettre à jour (j'espère que c'est clair... Désolé si ça ne l'est pas...)
3 - Suppression des fichiers à mettre à jour situés dans le dossier du logiciel (situé dans les "Program Files")
4 - Copie par le logiciel de mise à jour des fichiers dé-zippés vers le dossier du logiciel
5 - Mise à jour des clés de registre
6 - création d'un nouveau raccourci vers le bureau
7 - Suppression des fichiers téléchargés

Le problème se situe entre l'étape 1 et la 2. Le téléchargement se lance, mais il s'arrête après quelques kilooctets téléchargés et passe à l'étape 2.

Pour "lui dire" de passer à l'étape 2, j'ai utilisé
if my.computer.filesystem.fileexists ("C:\Windows\Temp\Fichier.zip")
Then
Form3.show
Me.hide
End if


Ce n'est pas la bonne solution, mais c'est la seule que j'ai trouvé...

Voilà voilà...

Merci,

Jojorealisateur
jojorealisateur
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
1 -
Bonjour,

Pour finir, dois-je vous fournir le code ou avez-vous une idée de solution ?

Merci beaucoup,

Jojorealisateur
yg_be
Messages postés
7421
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2019
438 > jojorealisateur
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
-
aucune idée avec les infos reçues.
jojorealisateur
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
1 -
Bonjour,

Donc, je vous donne le code... De toutes façons ça ne me coûtera qu'un message...

Je le publie ce soir...

Merci beaucoup,

Jojorealisateur
jojorealisateur
Messages postés
91
Date d'inscription
jeudi 9 mars 2017
Dernière intervention
18 février 2019
1 -
Bonjour,

Voici mon code source (Form2.vb) :
Imports System
Imports System.IO
Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.TopMost = True

        Download()

    End Sub
    Sub Download()
        Try
            My.Computer.Network.DownloadFile("ftp://Utilisateur@serveurFTP/FichierContenantLaMiseAJour.zip", "C:\Windows\Temp\FichierContenantLaMiseAJour.zip", "Utiliateur", "MotDePasse")
            VerifierTaille()
        Catch ex As Exception
            Download()
        End Try
    End Sub
    Sub VerifierTaille()
        If My.Computer.FileSystem.FileExists("C:\Windows\Temp\FichierContenantLaMiseAJour.zip") Then
            Dim taille
            Dim TailleFichier As New FileInfo("C:\Windows\Temp\FichierContenantLaMiseAJour.zip")
            taille = TailleFichier.Length
            If taille = 78019812 Then
'Dans l'idéal, il serait même génial de pouvoir télécharger un fichier contenant la taille du "FichierContenantLaMiseAJour.zip" et de la comparer avec la taille du fichier en téléchargement.
                Form3.Show()
                Me.Hide()
            Else
                VerifierTaille()
            End If
        Else
            VerifierTaille()
        End If
    End Sub
    Private Sub Button1_MouseHover(sender As Object, e As EventArgs) Handles Button1.MouseHover
        Me.Button1.ForeColor = System.Drawing.Color.White
        Me.Button1.FlatAppearance.BorderColor = System.Drawing.Color.Black
    End Sub
    Private Sub Button1_MouseLeave(sender As Object, e As EventArgs) Handles Button1.MouseLeave
        Me.Button1.ForeColor = System.Drawing.Color.Red
        Me.Button1.FlatAppearance.BorderColor = System.Drawing.Color.Red
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim w
        w = MsgBox("Voulez-vous vraiment annuler l'installation ?", vbYesNo + vbQuestion, "Annuler l'installation ?")
        If w = vbYes Then
            Application.Exit()
        End If
    End Sub
End Class


Donc, le fichier se télécharge avec ce code, mais le Form2.vb ne s'affiche pas, il n'y a qu'un téléchargement en arrière-plan...

Et après, lorsque le fichier est téléchargé, les choses fonctionnent, le logiciel passe à l'étape suivante (Form3.vb). Le problème est alors que tout se bloque...

Voici le code :
Imports System
Imports System.IO
Imports System.IO.Compression
Imports System.IO.Compression.ZipFile
Public Class Form3
    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click

    End Sub
    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Decompression()

    End Sub
    Sub Decompression()
        Dim zipPath As String = "FichierContenantLaMiseAJour.zip"
        Dim extractPath As String = "C:\Windows\Temp\DossierContenantLaMiseAJour"
        ZipFile.ExtractToDirectory(zipPath, extractPath)
        Me.Hide()
        Form4.Show()
    End Sub
End Class


Voilà... J'espère que ce n'est pas trop incompréhensible... Et que vous pourrez m'aider...

Un tout grand merci !

Jojorealisateur
yg_be
Messages postés
7421
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2019
438 -
peux-tu, en cas d’exception, afficher le code d'erreur, au lieu de recommencer?
 Catch ex As Exception
            Download()
Commenter la réponse de jojorealisateur