Download via FTP ne fonctionne pas [Résolu]

Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 4 juin 2012 à 10:05 - Dernière réponse : Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention
- 7 juin 2012 à 14:27
Bonjour,
J'ai un petit souci de download via ftp
voila :
je veux simplement telecharger un fichier, on va dire "toto.xls" situé dans un folder sur un ftp et le transferer vers c:/temp de mon DD local
j'ai fait ceci pour test :
Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Imports Microsoft.VisualBasic
Public Class Form1
    Private Sub download()
        Dim user As String = "monlogin"
        Dim password As String = "monpassword"
        Dim fileName As String = "toto.xls"
        Dim localpath As String = "c:/temp/"
        Dim requestFileDownload As FtpWebRequest = DirectCast(WebRequest.Create("ftp://ftp.cluster006.ovh.net/www/jdownloads/rep1/rep2/" & fileName), FtpWebRequest)
        requestFileDownload.Credentials = New NetworkCredential(user, password)
        requestFileDownload.Method = WebRequestMethods.Ftp.DownloadFile
 
        'Cette ligne ne fonctionne pas 
        Dim responseFileDownload As FtpWebResponse = DirectCast(requestFileDownload.GetResponse(), FtpWebResponse)
 
        Dim responseStream As Stream = responseFileDownload.GetResponseStream()
        Dim writeStream As New FileStream(localPath & fileName, FileMode.Create)
 
        Dim Length As Integer = 2048
        Dim buffer As [Byte]() = New [Byte](Length - 1) {}
        Dim bytesRead As Integer = responseStream.Read(Buffer, 0, Length)
 
        While bytesRead > 0
            writeStream.Write(buffer, 0, bytesRead)
            bytesRead = responseStream.Read(buffer, 0, Length)
        End While
 
        responseStream.Close()
        writeStream.Close()
        requestFileDownload = Nothing
        responseFileDownload = Nothing
    End Sub
 
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        download()
    End Sub


pourtant au clic sur le button1, ca plante avec comme information d'erreur
Le serveur distant a retourné une erreur : (550) Fichier non disponible (par exemple, fichier introuvable, accès impossible).


je ne comprends pas ou est le souci sachant que toto.xls est bien présent au bon endroit et que j'ai bien els droits necessaires sur le folder du ftp

quelle pourrait être mon erreur
merci beaucoup
Afficher la suite 

Votre réponse

56 réponses

Meilleure réponse
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 7 juin 2012 à 10:09
3
Merci
Non ne change pas le "lieu" d’appelée.

Ce que tu vas faire c supprimer les deux dernières ligne que je t dis d'ajouter vu que le problème persiste.

Puis dans la fonction download3 du va ajouter un if après l’instruction for... Le if devra tester la valeur de fichier.

Je pense que c la dernière chose que tu as à faire

Merci 4u4me4us 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de 4u4me4us
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 4 juin 2012 à 10:41
0
Merci
change "c:/temp/" par "c:\temp"

FTP est sensible à la caste (Minuscule, majuscule) donc vérifier si le nom du fichier est exactement comme dans le dossier FTP .

Vérifie bien sur que le fichier est dans le dossier FTP.

Vérifie si le nom des dossier sont exactement comme dans le dossier FTP .
Commenter la réponse de 4u4me4us
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 4 juin 2012 à 10:44
0
Merci
Il faudra peut être que tu mettes
"c:\temp" & fileName
Commenter la réponse de 4u4me4us
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 4 juin 2012 à 11:17
0
Merci
loool ca fonctionne mais maintenant mon fichier telechargé s'appelle toto.xlstoto.xls au lieu de toto.xls quesako

et une derniere question .... si je voulais downloader non pas juste toto.xls mais TOUS les .xls du rep2 ???
Commenter la réponse de Attila54
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 4 juin 2012 à 11:59
0
Merci
bon j'ai resolu le souci du nom de fichier ... il avait aps apprécié le & filename
me reste a remplacer le toto.xls par "tous les .xls"
Commenter la réponse de Attila54
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 4 juin 2012 à 14:14
0
Merci
ou encore mieux, carrément downloader le dossier rep2
Commenter la réponse de Attila54
Utilisateur anonyme - 4 juin 2012 à 18:35
0
Merci
Bonsoir,

Imports Microsoft.VisualBasic
Commenter la réponse de Utilisateur anonyme
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 5 juin 2012 à 07:08
0
Merci
Euhhh oui je comprends tes gros yeux banana32
je sais pas ce que j ai fait sur ce coup la
Bien sur cet import n a rien a faire la
N empêche je cherche depuis hier le moyen de dl le contenu du folder au lieu d un seul fichier et je trouve toujours pas ne serait ce que comment poser la bonne requête sur Google .... C est grave docteur?

Merci pour la piqûre de rappel
Commenter la réponse de Attila54
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 5 juin 2012 à 09:51
0
Merci
Là je ne pourrais pas te donner de réponse précise.

Si tu as de la chance la ligne suivante fonctionnera.
Dim requestFileDownload As FtpWebRequest = DirectCast(WebRequest.Create("ftp://ftp.cluster006.ovh.net/www/jdownloads/rep1/rep2/*.xls"), FtpWebRequest)


à la place de
Dim requestFileDownload As FtpWebRequest = DirectCast(WebRequest.Create("ftp://ftp.cluster006.ovh.net/www/jdownloads/rep1/rep2/" & fileName), FtpWebRequest)


La réponse viendra peut-être d'un autre utilisateur ou avant de faire ton téléchargement tu lance une requête ls qui te retournera les noms des fichier dans le dossier. La encore la réponse viendra peut-être d'un autre utilisateur.
Commenter la réponse de 4u4me4us
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 5 juin 2012 à 10:17
0
Merci
J'avais essayé quelque chose du genre, la je viens de retenter ...... il ne trouve pas le fichier ce qui ne semnle pas anormal.

Par contre j'ai, avec de l'aide, tenté un truc :
'listage des fichiers du rep par une fonction qui retourne la liste
Private Shared Function GetDirectoryListing(uri As String, credentials As ICredentials) As IList(Of String)
Dim entries As New List(Of String)()
Dim request = DirectCast(WebRequest.Create(uri), FtpWebRequest)
If credentials IsNot Nothing Then
request.Credentials = credentials
End If
request.Method = WebRequestMethods.Ftp.ListDirectory
Using response = DirectCast(request.GetResponse(), FtpWebResponse),
          stream = response.GetResponseStream(),
          reader = New StreamReader(stream)
 
            Dim line As String = reader.ReadLine()
            While line IsNot Nothing
                entries.Add(line)
                line = reader.ReadLine()
            End While
            Return entries
 	End Using
End Function


Puis bouclage sur le return pour dl les fichiers 1 par 1
Dim baseUri = "ftp://ftp.cluster006.ovh.net/www/jdownloads/rep1/rep2/"
Dim files = GetDirectoryListing(baseUri)
For Each file In files
    Dim uri = baseUri & "/" & file
    ' télécharger le fichier...
 Next


Souci .... je ne sais pas trop ou et comment placer ce code de dl, ce qui fait que pour l'instant ca ne fonctionne pas
Commenter la réponse de Attila54
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 5 juin 2012 à 10:37
0
Merci
Parfait!

La fonction GetDirectoryListing te retourne la liste des fichier dans un tableaux (je parts du principe que la fonction fonctionne) donc tu dois changer ton code comme cela (Taper de tête donc y a des fautes) :

    Private Sub download()
        Dim user As String = "monlogin"
        Dim password As String = "monpassword"
'ici g changé
        Dim fileName As  As New List(Of String)()
'ici g changé
fileName =GetDirectoryListing(uri As String, credentials As ICredentials) As IList(Of String)
        Dim localpath As String = "c:/temp/"
'Là je fais de l'impro
        Dim requestFileDownload As FtpWebRequest 

for eache fichier in fileName 'Là g ajouté
  requestFileDownload = DirectCast(WebRequest.Create("ftp://ftp.cluste  r006.ovh.net/www/jdownloads/rep1/rep2/" & fichier), FtpWebRequest)
        requestFileDownload.Credentials = New NetworkCredential(user, password)
        requestFileDownload.Method = WebRequestMethods.Ftp.DownloadFile
 
          'Cette ligne ne fonctionne pas 
          Dim responseFileDownload As FtpWebResponse = DirectCast(requestFileDownload.GetResponse(),   FtpWebResponse)
 
          Dim responseStream As Stream = responseFileDownload.GetResponseStream()
          Dim writeStream As New FileStream(localPath & fileName, FileMode.Create)
 
          Dim Length As Integer = 2048
          Dim buffer As [Byte]() = New [Byte](Length - 1) {}
          Dim bytesRead As Integer = responseStream.Read(Buffer, 0, Length)
 
          While bytesRead > 0
              writeStream.Write(buffer, 0, bytesRead)
              bytesRead = responseStream.Read(buffer, 0, Length)
          End While 
next 'Là g ajouté
        responseStream.Close()
        writeStream.Close()
        requestFileDownload = Nothing
        responseFileDownload = Nothing
    End Sub


C grossièrement ce qu'il faudrait obtenir.
Commenter la réponse de 4u4me4us
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 5 juin 2012 à 10:58
0
Merci
bon j'ai un peu adapté mais il demeure des erreurs floues pour moi :
Dim writeStream As New FileStream(localpath & fileName, FileMode.Create)
==> L'opérateur '&' n'est pas défini pour les types 'String' et 'System.Collections.Generic.List(Of String)

fileName =GetDirectoryListing(uri As String, credentials As ICredentials) As IList(Of String)
==> Virgule, ')' ou continuation d'expression valide attendue.

 responseStream.Close()
        writeStream.Close()
        responseFileDownload Nothing
> ne sont pas declares

je cherche en meme temps la bonne syntaxe
Commenter la réponse de Attila54
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 5 juin 2012 à 11:20
0
Merci
excuse moi mais c trop mignon !!

fileName =GetDirectoryListing(uri As String, credentials As ICredentials) As IList(Of String)

Il faut pas laisser cette ligne comme cela !!!

fileName =GetDirectoryListing(uri, credentials)

Là encore il faut mettre les bonne variable dedans.

remplace
Dim writeStream As New FileStream(localPath & fileName, FileMode.Create)

par
Dim writeStream As New FileStream(localPath & fichier, FileMode.Create)
Commenter la réponse de 4u4me4us
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 5 juin 2012 à 11:24
0
Merci
t'excuse pas y a de quoi se marrer, moi je croyais juste que je pouvais faire un dim des parametres et les laisser tel quels après
Commenter la réponse de Attila54
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 5 juin 2012 à 11:35
0
Merci
beuhhhh suis completement perdu du coup
Commenter la réponse de Attila54
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 5 juin 2012 à 13:27
0
Merci
Je ne comprend pas !

La fonction GetDirectoryListing tu l'as déjà utilisée? Elle fonctionne ?
Commenter la réponse de 4u4me4us
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 5 juin 2012 à 14:12
0
Merci
Ben pas utilisée a proprement parler je l'ai mise en place dans la structure de mon form mais ne l'ai pas testée en tant que tel
Commenter la réponse de Attila54
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 5 juin 2012 à 14:58
0
Merci
1) Supprime la fonction GetDirectoryListing

2)Replace la par la fonction suivante :
    Public Function LISTE_DIR_FTP(le serveur, utilisateur, maot de pass,chemin ftp commancer avec / finir avec / )
        Dim retour As String
        Dim request As FtpWebRequest = DirectCast(WebRequest.Create(serveur_ftp), FtpWebRequest)
        request.Method = WebRequestMethods.Ftp.ListDirectory

        request.Credentials = New NetworkCredential(user, password)

        Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
        Dim responseStream As Stream = response.GetResponseStream()
        Dim reader As New StreamReader(responseStream)
        retour = reader.ReadToEnd()
        reader.Close()
        response.Close()
        retour = Replace(retour, Chr(10), "")
        retour = Replace(retour, Chr(13), "*")
        LISTE_DIR_FTP = Split(retour, "*")
    End Function


3)Change ton code principale de la Façon suivante:

    Private Sub download()
        Dim user As String = "monlogin"
        Dim password As String = "monpassword"
'ici g changé
        Dim filname As String()
'ici g changé
fileName =LISTE_DIR_FTP(uri As String, credentials As ICredentials) As IList(Of String)
        Dim localpath As String = "c:/temp/"
'Là je fais de l'impro
        Dim requestFileDownload As FtpWebRequest 

for eache fichier in fileName 'Là g ajouté
  requestFileDownload = DirectCast(WebRequest.Create("ftp://ftp.cluste  r006.ovh.net/www/jdownloads/rep1/rep2/" & fichier), FtpWebRequest)
        requestFileDownload.Credentials = New NetworkCredential(user, password)
        requestFileDownload.Method = WebRequestMethods.Ftp.DownloadFile
 
          'Cette ligne ne fonctionne pas 
          Dim responseFileDownload As FtpWebResponse = DirectCast(requestFileDownload.GetResponse(),   FtpWebResponse)
 
          Dim responseStream As Stream = responseFileDownload.GetResponseStream()
          Dim writeStream As New FileStream(localPath & fileName, FileMode.Create)
 
          Dim Length As Integer = 2048
          Dim buffer As [Byte]() = New [Byte](Length - 1) {}
          Dim bytesRead As Integer = responseStream.Read(Buffer, 0, Length)
 
          While bytesRead > 0
              writeStream.Write(buffer, 0, bytesRead)
              bytesRead = responseStream.Read(buffer, 0, Length)
          End While 
next 'Là g ajouté
        responseStream.Close()
        writeStream.Close()
        requestFileDownload = Nothing
        responseFileDownload = Nothing
    End Sub


3) Il faut adapter le tout
Commenter la réponse de 4u4me4us
Attila54 409 Messages postés jeudi 30 juin 2005Date d'inscription 21 novembre 2013 Dernière intervention - 5 juin 2012 à 15:58
0
Merci
Bon alors adaptée, la fonction donne ca :
Private sub LISTE_DIR_FTP("ftp://ftp.cluster006.ovh.net/", "monlogin","monpass",/www/jdownloads/rep1/rep2/)
        Dim retour As String
        Dim requestFileDownload As FtpWebRequest = DirectCast(WebRequest.Create("ftp://ftp.cluster006.ovh.net/www/jdownloads/rep1/rep2/"), FtpWebRequest)
        requestFileDownload.Method = WebRequestMethods.Ftp.ListDirectory
        requestFileDownload.Credentials = New NetworkCredential("monlogin", "monpass")

        Dim responseFileDownload As FtpWebResponse = DirectCast(requestFileDownload.GetResponse(), FtpWebResponse)
        Dim responseStream As Stream = responseFileDownload.GetResponseStream()
        Dim reader As New StreamReader(responseStream)
        retour = reader.ReadToEnd()
        reader.Close()
        responseFileDownload.Close()
        retour = Replace(retour, Chr(10), "")
        retour = Replace(retour, Chr(13), "*")
        LISTE_DIR_FTP = Split(retour, "*")


j'ai quand même un doute sur la syntaxe exacte de
Private sub LISTE_DIR_FTP("ftp://ftp.cluster006.ovh.net/", "monlogin","monpass",/www/jdownloads/rep1/rep2/)
qui ressemble etrangement aux entrées dans un logiciel type flashfxp

J'ai aussi replace, Chr et Split qui ne sont pas déclarés .... que représentent ces char ?

Après j'attaque la sub download
Commenter la réponse de Attila54
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 5 juin 2012 à 16:12
0
Merci
Il ne faut pas toucher a cette partie de la fonction.

Bon, ma faute je n'est pas été précis.

Remer la fonction comme je te l'ai passée. et adapte ce code ci

Private Sub download()
Dim user As String = "monlogin"
Dim password As String = "monpassword"
'ici g changé
Dim filname As String()
'ici g changé
fileName =LISTE_DIR_FTP(uri As String, credentials As ICredentials) As IList(Of String)
Dim localpath As String = "c:/temp/"
'Là je fais de l'impro
Dim requestFileDownload As FtpWebRequest

for eache fichier in fileName 'Là g ajouté
requestFileDownload = DirectCast(WebRequest.Create("ftp://ftp.cluste r006.ovh.net/www/jdownloads/rep1/rep2/" & fichier), FtpWebRequest)
requestFileDownload.Credentials = New NetworkCredential(user, password)
requestFileDownload.Method = WebRequestMethods.Ftp.DownloadFile

'Cette ligne ne fonctionne pas
Dim responseFileDownload As FtpWebResponse = DirectCast(requestFileDownload.GetResponse(), FtpWebResponse)

Dim responseStream As Stream = responseFileDownload.GetResponseStream()
Dim writeStream As New FileStream(localPath & fileName, FileMode.Create)

Dim Length As Integer = 2048
Dim buffer As [Byte]() = New [Byte](Length - 1) {}
Dim bytesRead As Integer = responseStream.Read(Buffer, 0, Length)

While bytesRead > 0
writeStream.Write(buffer, 0, bytesRead)
bytesRead = responseStream.Read(buffer, 0, Length)
End While
next 'Là g ajouté
responseStream.Close()
writeStream.Close()
requestFileDownload = Nothing
responseFileDownload = Nothing
End Sub
Commenter la réponse de 4u4me4us

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.