Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[Silverlight 2] Comment télécharger des fichiers avec Silverlight 2

Dans la version 1.1 Alpha de Silverlight 2, mais également dans la version 1.0, on disposait d'un composant bien pratique pour télécharger des éléments: le Downloader.

Avec la version 2 de Silverlight, ce contrôle n'existe plus mais a été remplacé par un composant nommé WebClient, le même que celui que l'on peut retrouver dans le Framework .NET.

Pour l'utiliser afin de télécharger des fichiers, il n'y a rien de plus simple: il vous suffit de vous abonner à l'évènement OpenReadCompleted et à lancer un appel à la méthode OpenReadAsync, qui va exécuter la requête de manière asynchrone:

WebClient client = new WebClient();

client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);

client.OpenReadAsync(new Uri("../Files/Demo.txt", UriKind.Relative));

Vous pouvez remarquer que la méthode prend en paramètre un objet de type Uri qui pointe vers le fichier à télécharger. Vous pouvez aussi vous demander pourquoi avoir utiliser les ".." dans l'adresse du fichier. En fait, n'oubliez pas que le fichier qui va contenir votre application Silverlight, le fichier ".xap", est déployé dans le répertoire ClientBin: il vous faut donc remonter jusqu'à la racine ou, plus simplement, jusqu'à l'emplacement exact du fichier à télécharger.

Il ne nous reste plus qu'à écrire le contenu de la méthode client_OpenReadCompleted:

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

{

    StreamResourceInfo streamText = new StreamResourceInfo(e.Result, string.Empty);

 

    StreamReader reader = new StreamReader(streamText.Stream);

 

    this.tbText.Text = reader.ReadToEnd();

}

On utilise un objet de type StreamResourceInfo, en lui passant en paramètre le résultat de l'appel à la méthode OpenReadAsync. Cet objet est ensuite utilisé via un StreamReader qui sera manipulé pour afficher le contenu du fichier.

Cette technique est très pratique lorsque l'on doit télécharger des fichiers "uniques" mais dans le cas où l'on souhaite télécharger des archives Zip, il va falloir faire autrement.

La déclaration du WebClient ne change pas, hormis le nom du fichier a télécharger:

WebClient clientZip = new WebClient();

clientZip.OpenReadCompleted += new OpenReadCompletedEventHandler(clientZip_OpenReadCompleted);

clientZip.OpenReadAsync(new Uri("../Files/DemoZip.zip", UriKind.Relative));

La méthode clientZip_OpenReadCompleted, elle, est légèrement différente:

void clientZip_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

{

    StreamResourceInfo streamZip = new StreamResourceInfo(e.Result, string.Empty);

 

    var demoZipFile = Application.GetResourceStream(streamZip, new Uri("DemoZip.txt", UriKind.Relative));

 

    StreamReader reader = new StreamReader(demoZipFile.Stream);

 

    this.tbZip.Text = reader.ReadToEnd();

}

Comme dans la précédente version, on utilise un objet de type StreamResourceInfo. Cependant, alors qu'avant nous avions directement accès au contenu du fichier, ici nous allons devoir récupérer, via la méthode Application.GetResourceStream, un flux vers le fichier qui nous intéresse, au sein de l'archive Zip.

A l'exécution, nous récupèrons bien le contenu de nos 2 fichiers: le premier directement depuis le fichier texte et le second depuis le fichier texte contenu dans l'archive Zip:

image

Vous pourrez trouver, en pièce jointe à ce post, une application de démonstration de cette technique.

 

A+

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 10 avril 2008 10:33 par Thomas LEBRUN
Classé sous : , ,

Attachment(s): DownloaderSilverlight.zip

Commentaires

RaptorXP a dit :

Il n'y a pas besoin de passer par StreamResourceInfo dans le premier cas, ceci suffit:

StreamReader reader = new StreamReader(e.Result);

# avril 10, 2008 17:57
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 17 heures et 51 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 20 heures et 25 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39