IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Ouvrir un fichier par FTP


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut Ouvrir un fichier par FTP
    Bonjour,
    je ne trouve pas de solutions à mon problème:

    Je suis en SL3.

    je souhaiterai télécharger des fichiers par FTP.
    Sachant que mon appli contient la lsite des fichiers ftp ainsi que le login et mot de passe ftp.

    exemple de fichiers :
    ftp://127.0.0.1/file1.png
    ftp://127.0.0.1/Folder1/file1.png

    Mon souhait est de pouvoir récupérer le fichier et de proposer à l'utilisateur d'ouvrir ou d'enregistrer le fichier (très important)

    Pour cela, Dois-je passer par le server IIS (webservice asp.net) ou je peux passer directement par silverlight ?

    Acutellement je passe par IIS avec ce code, mais ca marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    [WebMethod]
            public void GetDownloadFile(string filePath, string user, string password)
            {
                // The serverUri parameter should start with the ftp:// scheme.
                Uri serverUri = new Uri(filePath);
                if (serverUri.Scheme != Uri.UriSchemeFtp)
                {
                    //return false;
                }
     
                // Get the object used to communicate with the server.
                WebClient request = new WebClient();
     
                // This example assumes the FTP site uses anonymous logon.
                request.Credentials = new NetworkCredential (user, password);
                try
                {
                    string filename = System.IO.Path.GetFileName(serverUri.ToString());
                    request.DownloadFile(serverUri.ToString(), filename);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
    }

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu ne peux pas en Silverlight.

    Dans ton service essaye plutôt la classe FtpClient.

  3. #3
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut
    j'ai regardé la classe FtpClient...

    résultat j'essaie de passer par là, mais j'ai des erreurs :

    Dans le responseStream, j'ai plein d'exception. notamment, il en fait une sur le responseStream.Lenght et contentType...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Uri serverUri = new Uri(filePath);
                    if (serverUri.Scheme != Uri.UriSchemeFtp)
                    {
                        //return false;
                    }
     
                    string filename = System.IO.Path.GetFileName(serverUri.ToString());
     
                    // Get the object used to communicate with the server.
                    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
                    request.Method = WebRequestMethods.Ftp.DownloadFile;
                    request.UseBinary = true;
                    request.UsePassive = true;
                    request.KeepAlive = true;
     
                    // This example assumes the FTP site uses anonymous logon.
                    request.Credentials = new NetworkCredential(user, password);
     
                    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
     
     
     
     
                    Stream responseStream = response.GetResponseStream();
                    StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
     
                    long FileSize = responseStream.Length;
                    byte[] Buffer = new byte[(int)FileSize];
                    responseStream.Read(Buffer, 0, Convert.ToInt32(FileSize));
                    reader.Close();
     
                    HttpResponse httpResponse = HttpContext.Current.Response;
                    httpResponse.Clear(); // clear the current output content from the buffer
                    httpResponse.AppendHeader("Content-Disposition", "attachment; filename=" + filename);
                    httpResponse.AppendHeader("Content-Length", response.ContentLength.ToString());
                    httpResponse.ContentType = "application/x-msdownload";
                    httpResponse.BinaryWrite(Buffer);
                    httpResponse.End();
    -----------------------------------------------------------

    Je réactualise mon sujet:

    Mon client silverlight affiche un treeView contenant des fichiers ftp.
    Je récupère cette liste de fichiers à travers un web service.

    Lorsque l'utilisateur clique sur un noeud du treeView, je dois lui proposer une boite de dialogue pour ouvrir ou enregistrer le fichier où il le souhaite.

    Donc je passe en paramètre à mon service, le chemin du fichier ftp (ftp://127.0.0.1/file1.png par exemple) et le login/mdp.

    Comment puis-je implémenter cela ? j'ai regarder un peu partout, je ne m'en sors pas.

    Pleeaassee heeeeeeeelp

  4. #4
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut
    Bon j'ai trouvé la solution. je vous la fait partager au cas où...
    L'idée est de pouvoir offrir un fichier ftp en téléchargement côté client.

    Silverlight va appelé une page aspx en transmettant en paramètre le chemin ftp, le login et mdp.
    Cette page va effectuer les traitements pour récupérer le fichier sur IIS (dans un répertoire temp par exemple) et ensuite, de l'attacher à un HttpResponse pour mettre ce fichier en "attachment".

    J'ai été obligé de passer par une page aspx, car le service asmx ne pouvait pas appeler le HttpResponse. C'est pas très sécurisé mais ca marche.
    L'inconvénient c'est que le fichier est téléchargé 2 fois.
    ftp=>IIS=>Client

    Voici le code pour être plus clair

    Alors côté Silverlight, lors d'un évènement (click sur le fichier à télécharger) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //création de l'url en transmettant les infos
    Uri ftpURI = new Uri(HtmlPage.Document.DocumentUri, String.Format("FTPHandler.aspx?ftpFilepath={0}&user={1}&pwd={2}", filePath, ftpUser, ftpPassword));
     
    //ouvrir la page aspx contenant le fichier sur une nouvelle page
    HtmlPage.Window.Navigate(ftpURI, "_blank");
    Côté ASP:
    On créé une page FTPHandler.aspx.

    Le page_Load contiendra:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    protected void Page_Load(object sender, EventArgs e)
            {
    //Récupère les données silverlight            
    string filepath = Request.QueryString["ftpFilepath"];
                string user = Request.QueryString["user"];
                string pwd = Request.QueryString["pwd"];
     
                Uri serverUri = new Uri(ftpFilepath);
                string filename = System.IO.Path.GetFileName(serverUri.ToString());
     
                string serverPath = @"VotreCheminTemporaire\Temp\";
     
                //On Supprime le fichier s'il est déjà téléchargé
    //car il se peut qu'il ne soit pas à jour.
                if (File.Exists(serverPath + filename))
                {
                    File.Delete(serverPath + filename);
                }
     
                //Téléchargement du fichier FTP
                WebClient req = new WebClient();
                req.Credentials = new NetworkCredential(user, pwd);
                req.DownloadFile(serverUri, serverPath + filename);
     
                FileInfo fileinfo = new FileInfo(serverPath + filename);
     
     
                HttpResponse response = HttpContext.Current.Response;
                response.Clear(); //Vide les entêtes
                response.AppendHeader("Content-Disposition", "attachment; filename=" + filename);
                response.TransmitFile(serverPath + filename); //Transfer du fichier au client silverlight
                response.End();
     
            }
    Voilà, il n'y a pas de gestion d'erreurs pour l'instant. SI vous avez mieux je suis curieux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FTP] Télécharger un fichier par FTP
    Par jerome38000 dans le forum Langage
    Réponses: 5
    Dernier message: 27/05/2011, 15h41
  2. ouvrir un fichier par chemin unc
    Par MrEddy dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/01/2006, 10h45
  3. Transfert fichier par FTP
    Par j_bolduc dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/11/2005, 19h59
  4. Transfert de fichier par ftp
    Par schub1015 dans le forum MFC
    Réponses: 3
    Dernier message: 14/01/2004, 17h53
  5. Réponses: 1
    Dernier message: 19/08/2003, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo