La compression du fichier avant de le télécharger sur le côté client
Fondamentalement, je vais travailler avec des fichiers XML (approx. 20 - 50 MO). Ces fichiers doivent être téléchargées sur un serveur.
Je sais qu'il n'est pas possible de toucher les fichiers avec javascript, ni de mettre en œuvre la compression HTTP sur le côté client.
Ma question est que si une solution existe (flash /action script) qui compresse un fichier et dispose d'une API javascript?
Le scénario est le suivant:
- Essayez de télécharger 50 MO fichier XML
- Avant de télécharger un de la saisir avec du Javascript et de l'envoyer vers le compresseur.
- Télécharger le fichier compressé à la place de celui d'origine.
J'ai trouvé ceci mais je ne l'ai jamais utilisé (et pas de Flash ici): jszip.stuartk.co.uk
Merci pour le lien, mais en fait j'aurais besoin d'une solution qui fonctionne dans tous les principaux navigateurs tels que IE7+, FF, Chrome et Safari.
Merci pour le lien, mais en fait j'aurais besoin d'une solution qui fonctionne dans tous les principaux navigateurs tels que IE7+, FF, Chrome et Safari.
OriginalL'auteur feketegy | 2011-12-04
Vous devez vous connecter pour publier un commentaire.
Du Flash intégré de mise en œuvre de ByteArray a une méthode (
ByteArray::deflate
à dégonfler le contenu (de l'objet bytearray) L'algorithme deflate est le Compression DEFLATE Spécifications de Format de Données de la version 1.3.Il y a aussi un
ByteArray::compress
méthode qui compresse à l'aide de la zlib algorithmeTenir sur un peu, je vais vous écrire un exemple de code pour l'utilisation de cette classe et de l'exposer à JavaScript.
MODIFIER
J'ai téléchargé le fichier à http://www.filefactory.com/file/cf8a39c/n/demo5.zip
EDIT 2 Pour ceux qui ne pouvaient pas télécharger les fichiers:
Mon code ActionScript dans demo5.fla (compilé à demo5.swf)
Mon code HTML à intégrer le fichier swf:
et enfin le code javascript:
J'ai ajouté le télécharger à environ 32 minutes ago (ne sais pas pourquoi le commentaire que j'ai ajouté après qui n'ont pas posté). De toute façon, le code html dans il contient assez explicite javascript (avec des commentaires), donc si vous n'avez pas obtenir quelque chose, de ne pas hesaitate à poser. Un hic cependant: vous allez avoir à exécuter le code html sur http:// domaine ou d'ajouter une exception à votre flash player (de votre choix)
Merci pour cette, aussi, puis-je passer d'un fichier à partir de la <input type="file" />, pour le flash? En javascript, j'ai uniquement le chemin d'accès du fichier et rien d'autre. Donc, une fois que le fichier est compressé que suggérez-vous comment l'envoyer sur le serveur?
ah!!!! la fonction de besoins le contenu du fichier, et non pas le chemin. C'est parce que Flash (à partir du navigateur) ne peut pas lire le fichier, sauf si elle est déclenchée par l'interaction de l'utilisateur (comme le clic ou la touche enfoncée). Alternativement, vous pouvez créer un ensemble de l'uploader en Flash. Je vais télécharger un exemple bientôt
Voir livedocs.adobe.com/flex/3/html/... pour obtenir des instructions sur la façon de construire un uploader (désolé je ne peux pas télécharger mon code parce que je suis dur pressé par le temps) c'est assez simple
OriginalL'auteur Pranav Hosangadi
Vous pouvez faire usage de JSZip. Pour l'entrée, il prend en charge Chaîne/ArrayBuffer/Uint8Array/Tampon, mais pas
blob
s, qui est ce que vous obtenez à partir d'un<input type="file"/>
avec javascript:(lien)
De sorte que vous aurez à convertir le blob/le fichier par exemple à un ArrayBuffer première, par exemple, à l'aide de
FileReader.readAsArrayBuffer()
. Notez que cette fonction fonctionne de manière asynchrone, en exigeant le rappel de l'utilisation. Il y a aussi un FileReaderSync disponible, mais "Cette interface n'est disponible que chez les travailleurs, car il permet aux e/S synchrones qui pourraient bloquer", donc je ne vois pas bien l'utiliser.(MODIFIER. Je ne suis pas sûr mais je crois que vous pouvez sauter la goutte->ArrayBuffer conversion maintenant et simplement zip le Fichier objet.)
Toute cette approche est particulièrement utile si php directive du
max_file_uploads
a été fixé à un petit nombre par votre serveur hôte, pour l'instant, la seule chose que vous avez à vous préoccuper estupload_max_filesize
Pour référence, un exemple de code extrait qui suit (à l'aide de
JQuery
) pour mettre plusieurs fichiers d'unmultiple
l'entrée de fichier dans un zip avant de soumettre:Côté serveur-sage, vous aurez accès
$_FILES["fileZip"]
.OriginalL'auteur Blauhirn
Si pour quelque raison vous ne pouvez pas obtenir une solution en JavaScript pour tous les principaux navigateurs, je sais que d'un AS3 bibliothèque de compression ici: http://code.google.com/p/ascompress/.
Aussi, un refroidisseur d'option, si vos utilisateurs cibles sont un peu tech savy, pourquoi ne pas les avoir télécharger un .zip fichier xml? Ensuite, du côté serveur, vous pouvez décompresser et de processus.
De toute façon du côté serveur, vous aurez envie de dézipper/décompresser, qui doit être facile à google pour des solutions si vous n'avez pas à l'esprit.
Vous pouvez gérer l'ensemble de il en ActionScript, puisqu'il dispose de son propre navigateur de fichiers. Si vous avez besoin de parler avec le JavaScript, pour quelque raison que ce soit si vous pouvez utiliser AS3 est ExternalInterface. Pranav a une belle solution ci-dessus.
OriginalL'auteur ToddBFisher
Avec Silverlight, vous pouvez des fichiers zip sur le côté client, et cette approche fonctionne dans tous les principaux navigateurs. En outre, vous pouvez interagir avec votre Silverlight widget via JavaScript. Aussi, si un utilisateur a besoin de télécharger plusieurs fichiers, votre Silverlight widget peut montrer un unique boîte de dialogue pour la sélection de tous les fichiers. Le seul inconvénient est que vos clients doivent installer le plug-in Silverlight.
OriginalL'auteur Stan Jordan
Envisager d'examiner ce que d'autres stackoverflow post. La lecture de ces deux réponses peintures une bonne image de la compression de la réalité.
Je suis en train d'étudier la mise en œuvre d'une Silverlight de Flex solution qui comprime le côté client et si l'utilisateur ne veut pas l'installer, de compresser et de décompresser le fichier côté serveur. Mettrai à jour ce post quand une solution est trouvée.
L'installation du contrôle serait vendue à l'utilisateur un gain de temps, qui est normalement vrai. Pour le serveur, il serait une largeur de bande de compression et de traitement de veille.
OriginalL'auteur Ben Gripka
Il y a un peu de javascript (bibliothèque de compression de huffman librement disponible, par exemple https://github.com/wilkerlucio/huffman_js mais je pense que votre tâche est impossible, car avec le javascript et le html, il n'est pas possible de charger de grandes quantités de données dans le navigateur ou du client de mémoire.
C'est juste une suggestion. Vous pouvez le faire vous-même.
check this out gildas-lormeau.github.io/zip.js
OriginalL'auteur Bytemain