Suite à mon précédent topic sur Linq. Je cherche à améliorer mon web service d’export de données.
Aujourd’hui, le web service génère le fichier à exporter sur le serveur dans un des répertoires IIS. Pour ensuite, récupérer ce fichier sous forme d’url pour le rendre téléchargeable.
Le problème, c’est que le fichier fait dans la centaine de Mo et qu’il n’y a aucune notion de nettoyages auto des fichiers.
L’idée étant de générer ce fichier directement sur la machine cliente dans le répertoire temporaire de son Windows ou de Mes Documents. Comme ça, il n’y a aucune écriture côté serveur et en plus le fichier est nettoyé par Windows après un petit reboot. Je ne sais pas si c’est réellement faisable. Je pensais que la fonction Path.GetTempFilePath() me génère un chemin en se basant sur le poste client. Et bien, non.
Pour l’instant, je n’ai rien sur Google ou j’ai mal cherché.
Hum, j’ai une petite classe d’helper qui fait ca au taff, je te la pastebin demain
Sinon, ne commet pas l’erreur de penser que le temp est vidé par windows tout seul hein. C’est pas le cas, nettoies bien les fichiers apres utilisation. Comme les capotes quoi.
Merci Ana-l. Mais, oui, je chippotte. C’est que je ne veux pas supprimer le fichier tout de suite. Sachant que si j’ai plusieurs utilisateurs qui veulent éventuellement exporter leurs données, bah, y aura tout plein mais alors tout plein de fichiers csv. Et ces derniers prennent généralement au moins 2 min max pour les grosses données pour être finalisé.
Bon, après, y a moyen que je modifie légèrement ton script pour supprimer les fichiers obsolètes en me basant sur leur date de création/dernière modification (à fouiller si c’est possible).
Sinon, en fouillant le net, il y a l’IsolatedStorage qui répond parfaitement à mes besoins sauf que, je veux récupérer le chemin complet de ce storage et je n’ai pas encore trouvé la fonction pour ça.
Par compression, tu vois ça dans quel genre ? zip ? ou bien par un algo de compressions pendant la phase d’écriture du fichier ?
Yep. Mais juste que le besoin est de faire télécharger le fichier généré à la fin du traitement (bon ok, c’est con de faire télécharger un fichier qui se trouve déjà sur le poste client en passant le chemin du fichier dans iexplorer). C’est pour ça que je veux connaitre le chemin complet.
Bon, après, je ne dis pas que c’est propre ou quoique se soit. Je ne vois pas d’autres solutions.
Edit: bon, bah l’isolatedStorage cay nul aussi. Puisque ce dernier se situe sur le serveur.
Edit bis: Alors, en me basant sur l’ensemble de vos suggestions, je suis donc resté sur l’écriture de fichiers sur le serveur. J’ai donc compressé mes fichiers générés (avec GZipStream de System.IO.Compression) en plus de nettoyer le répertoire en fonction de la date de création des fichiers (à hauteur de 2h mais peut etre paramétrable).
Je n’ai pas recensé énormément d’impact au niveau des performances.
Celà dit, si y a des gens qui ont une solution pour créer les fichiers directement sur le poste client à partir d’une appli web, je ne dis pas non.
HTML5 cay mort, l’appli qui va cohabiter avec mes pages ne tourne que sur Internet Explorer (à moins que la version actuelle gère enfin HTML 5 mais je doute).
Attention parce que tu ne peux pas ouvrir des fichiers compressés avec GZipStream comme ça. Il faudra que tu les décompresses (toujours avec GZipStream) à un moment donné. C’est pour ça qu’AnA-l te conseillait Ionic.Zip, qui te génère des fichiers zip ouvrables avec Winzip etc.
Ah, mince. Dommage que je n’ai pas une machine ayant Winzip ou le dézipper Windows. On est tous sur Winrar En plus je voulais éviter au possible d’utiliser des librairies supplémentaires même gratuit sauf si on ne peut pas faire autrement. En plus, j’ai vu sur Ionic qu’on pouvait choisir un niveau de compression, et c’est pas mal du tout.
Bon oublie ce que je viens de dire… je viens de tester l’exemple de la msdn et avec 7-zip ça a l’air de très bien fonctionner, winrar aussi… Au temps pour moi je ne sais pas où j’ai été pêché ça…
Au fait je suis peut être à côté de la plaque, mais pourquoi tu veux sauvegarder sur le filesystem ton fichier? Tu peux pas les garder en mémoire (avec un cache devant si comme tu précisais plusieurs clients peuvent demander les mêmes données) et les servir (avec l’équivalent C# d’une servlet) en zippant à la volée le fichier?
C’est possible de générer le fichier en cache et de le proposer via la popup d’IE de le télécharger ? (je n’ai jamais fait ça)
Par contre, il s’agit juste d’un petit prototype. Donc, je ne sais pas si des utilisateurs seront succeptibles d’exporter assez souvent les données.
[quote=“MetalDestroyer, post:18, topic: 50887”]C’est possible de générer le fichier en cache et de le proposer via la popup d’IE de le télécharger ? (je n’ai jamais fait ça)
Par contre, il s’agit juste d’un petit prototype. Donc, je ne sais pas si des utilisateurs seront succeptibles d’exporter assez souvent les données.[/quote]
Bin je connais pas le C# mais il n’y a pas de raison que ça ne le permette pas. Si j’avais à faire ça en Java j’aurais probablement fait une servlet (~= classe dont le but est de gérer une requête/réponse HTTP) et en fonction d’un paramètre sur la requête, j’aurais choppé les bonnes données côté serveur, je les aurais formatées et retournées en écrivant le flux binaire sur la response (en ayant pris soin de spécifier le mimetype).
[quote=“LeGzo, post:19, topic: 50887”]Bin je connais pas le C# mais il n’y a pas de raison que ça ne le permette pas. Si j’avais à faire ça en Java j’aurais probablement fait une servlet (~= classe dont le but est de gérer une requête/réponse HTTP) et en fonction d’un paramètre sur la requête, j’aurais choppé les bonnes données côté serveur, je les aurais formatées et retournées en écrivant le flux binaire sur la response (en ayant pris soin de spécifier le mimetype).
Et l’histoire du cache, c’est en bonus si besoin.[/quote]
Et si le flux est assez lourd genre 30 Mo et supérieur même après compression, ça marche bien ? Il n’y a pas de soucis au niveau du temps d’attente ou autre ? En gros l’idée, c’est comme pour du SOAP mais au lieu d’envoyer un flux XML, c’est du binaire ?
Je vais voir ça après confirmation de ta part.