Précédent   Forum des professionnels en informatique > Dotnet > Développement Web avec .NET > Windows Azure
Windows Azure Forum d'entraide sur la plateforme de Cloud Computing Windows Azure
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/11/2011, 20h35   #1
Membre régulier
 
Homme Florian Lemaire
Développeur .NET
Inscription : mars 2003
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Florian Lemaire
Âge : 24
Localisation : Canada

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2003
Messages : 82
Points : 73
Points : 73
Par défaut Décompression fichier .zip via le cloud

Bonjour,

désolé pour le titre large, je ne savais vraiment pas comment l'intitulé...

voilà ce que je cherche à faire:

j'ai mon application web (Web Role) où je peux uploader un fichier .zip contenant des photos.
Je rajoute ce fichier .zip dans un Blob sur le Cloud Storage , en même temps, je rajoute un message dans une Queue (toujours sur le Cloud Storage) qui contient le nom du fichier précédemment uploader.

A côté, j'ai un Worker Role qui traite les messages dans la Queue:

Le but est de récupérer l'archive zip (contenu dans le Blob), décompresser cette archive (opération faite à l'aide de la libraire SharpZipLib)
récupérer les images et les ajouter dans un container sur mon Cloud Storage (donc en tant que Blob pour chaque image)


Ce qui m’ennuie, c'est le passage décompression à partir du blob pour revenir une liste de fichiers.
Je passe par un LocalStorage que j'ai déclaré dans ma définition de service mais je ne sais pas si c'est une bonne idée.

Dois t-on procéder comme cela normalement ? dans une optique de performance... et de limiter le coût de l'opération

Code c# :
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
40
 
CloudQueueMessage msg = queue.GetMessage();
if ( msg != null ) {
    string path = msg.AsString;
 
    // Récupére l'archive en local
    CloudBlob blobArchive = containerTemp.GetBlobReference( path );
    LocalResource sto = RoleEnvironment.GetLocalResource( "LocalStorageTemp" );
    string archiveFileName = Path.Combine( sto.RootPath, "archive.zip" );
    blobArchive.DownloadToFile( archiveFileName );
 
    // Extraction de l'archive sur le LocalStorage et récupération de la liste de tout les fichiers images
    ExtractArchive( archiveFileName, sto.RootPath );
    string[] tabImageFile = Directory.GetFiles( sto.RootPath, "*.jpg", SearchOption.AllDirectories );
    File.Delete( archiveFileName );
 
    // Parcours de toutes les images pour ajout dans le Cloud Storage
    foreach ( string imageFile in tabImageFile ) {
        string fileName = Path.GetFileName( imageFile );
        CloudBlob blobFullSize = containerPhotos.GetBlobReference( fileName );
 
        // Download the image
        FileStream image = File.OpenRead( imageFile );
        image.Seek( 0, SeekOrigin.Begin );
 
        // upload original image and thumbnail image
        blobFullSize.UploadFromStream( image );
        blobFullSize.Properties.ContentType = "image/jpeg";
        blobFullSize.SetProperties();
 
        // remove image file
        File.Delete( imageFile );
    }
 
    // Delete the message on the queue, and the temp blob
    queue.DeleteMessage( msg );
    blobArchive.Delete();
 
    Trace.WriteLine( path + " has been processed" );
}
Florian.L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 08h14   #2
Invité de passage
 
Wilfried Woivré
Inscription : octobre 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Wilfried Woivré

Informations forums :
Inscription : octobre 2010
Messages : 3
Points : 3
Points : 3
Bonjour,

Alors pour ma part, j'aurais fait comme toi pour gérer ce cas.

Après si tu veux limiter le cout de l'opération, il est possible de supprimer le Worker Role afin de ne te laisser que le Web Role activé et de fait de faire le traitement de ton archive via une tâche périodique que tu auras défini dans ton application.

Ensuite dans une optique de performance, tu peux aussi parralélliser le traitement de ton message, comme par exemple un upload avec PLinq. Et je ne serais que trop de conseiller de mettre en place une RetryPolicy pour l'upload dans les blobs, il n'est pas rare d'avoir des erreurs.

Wilfried Woivré - http://blog.woivre.fr/ - ZeCloud
wilfriedwoivre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h57.


 
 
 
 
Partenaires

Hébergement Web