6
votes

Fractionnement d'un fichier avant de télécharger?

sur une page Web, est-il possible de diviser de gros fichiers en morceaux avant que le fichier ne soit téléchargé sur le serveur? Par exemple, diviser un fichier de 10 Mo en 1 Mo de morceaux et télécharger un morceau à la fois tout en affichant une barre de progression?

On dirait que JavaScript n'a pas de capacités de manipulation de fichiers, mais qu'en est-il des applets Flash et Java?

Cela aurait besoin de travailler dans IE6 +, Firefox et Chrome. Mise à jour : oublié de mentionner que (a) nous utilisons des greils et (b) cela doit fonctionner sur https.


4 commentaires

Ceci est probablement possible dans Flash et Java, mais pourquoi? Quel sens cela ferait-il? Voulez-vous contourner les limitations de taille?


Voici une autre question similaire: Stackoverflow.com/questions/3155587/...


J'explore principalement cette option pour éviter de gérer un côté des fichiers énormes. Le contenu des fichiers téléchargés devra être analysé et stocké dans une DB. Pour une grande quantité de données à la fois, nous aurions besoin d'un pool dédié de fils de longue durée sur les extrémités avant pour transférer toutes les données, éventuellement d'abord à un service backend via RPC, puis la DB elle-même. Ensuite, il y aurait les problèmes de traitement du nettoyage des fichiers, des tentatives, des serveurs frontales qui se bloque, la gestion de la mémoire, etc. Tout cela est faisable, mais si cela pouvait être fait du côté du client, je pourrais obtenir la solution la solution beaucoup plus rapidement.


Essayez Utilisez ceci: Stackoverflow.com/a/12056417/551744 . J'ai relialisé des fichiers de fractionnement avec JavaScript et la fusionner sur le côté serveur. Cela peut vous aider aussi: html5rocks.com/ru/tatudials/file/dndfiles


4 Réponses :


1
votes

Il n'y a pas de solution JavaScript pour cette sélection de navigateurs. Il y a le API de fichier mais tandis que cela fonctionne dans les versions de Firefox et de chrome plus récentes, il ne va pas arriver dans IE (aucun signe de celui-ci dans IE9 Bettas encore soit).

Dans tous les cas, lisez le fichier localement et en téléchargeez-le via XMLHTTPQUEST est inefficace car XMLHTTPQUEST n'a pas la possibilité d'envoyer un fichier binaire pur, uniquement du texte Unicode. Vous pouvez coder binaire en texte à l'aide de BASE-64 (ou, si vous êtes vraiment dédié, un codage à 7 bits personnalisé de votre choix), mais cela sera moins efficace qu'un téléchargement de fichier normal.

Vous pouvez certainement faire des téléchargements avec Flash (voir swfupload et al), ou même Java Si vous devez ( Jumploader ... Je ne me dérangerais pas, ces jours-ci, cependant, comme la prévalence du flash est très élevée et Le plugin Java continue de refuser). Vous n'obtiendrez pas nécessairement le contrôle de bas niveau pour se séparer en morceaux, mais avez-vous vraiment besoin de cela? Quoi pour?

Une autre approche possible consiste à utiliser un champ de téléchargement de fichier HTML standard, et lorsque la soumission se produit, définissez un appel d'intervalle pour interroger le serveur avec XMLHTTPQUBEST, en le demandant à quelle distance le téléchargement du fichier viennent. Cela nécessite un peu de travail sur le serveur Fin pour stocker la progression actuelle de téléchargement dans la session ou la base de données, une autre demande peut donc la lire. Cela signifie également utiliser une bibliothèque d'analyse de formulaire qui vous donne un rappel de progression, que la plupart des langues standard intégrées telles que PHP ne le font pas.

Quoi que vous fassiez, prenez une approche «amélioration progressive», permettant aux navigateurs sans assistance pour revenir à un téléchargement HTML uni. Les navigateurs ont généralement une barre de progression de téléchargement pour les téléchargements de fichiers HTML, il a simplement tendance à être petit et facile à manquer.


3 commentaires

Flash ne peut pas le faire. Il possède des fonctionnalités de téléchargement de fichiers, mais le téléchargement est masqué à partir du code client. Il n'y a pas d'accès aux données de fichier réelles. Les applets Java non signés ne peuvent probablement pas le faire non plus. Je suis assez certain que vous auriez besoin d'utiliser un applet Java signé.


HMMM, cette barre de bas de la face d'IE (6 & 7) au travail est très trompeuse: lorsque j'envoie des fichiers volumineux (généralement 10-50 Mo), la barre est pleine Way plus tôt que le téléchargement de fichier se termine réellement.


Ouais. Il y a définitivement des problèmes avec cela surtout dans IE. C'est un peu triste de savoir comment il y a eu tellement d'efforts déployés dans le contrôle du téléchargement de fichier HTML, lorsque cela aurait pu être résolu beaucoup plus facilement avec un peu de travail des fournisseurs de navigateurs qui rendent leur UI existant un peu mieux.



2
votes

La seule option que je connaisse de cela permettrait à ce serait une applet Java signée.

Les applets non signés et les films Flash n'ont pas d'accès au système de fichiers. Ils ne seraient donc pas en mesure de lire les données de fichier. Flash est capable de télécharger des fichiers, mais la majeure partie de celle-ci est gérée par la mise en œuvre intégrée de flash et de ce que je me souviens que le contenu du fichier ne serait jamais exposé à votre code.


5 commentaires

De Flash Player 10, vous pouvez lire des données de fichier à l'aide de ActionScript: Mikechambers.com/blog/2008/08/20/...


Intéressant. Je n'ai pas réalisé qu'ils avaient ajouté ça.


J'ai "avec succès" mis en œuvre un téléchargement de fichier chunded en flash à l'aide de la filerenceference. Je dis "avec succès" car Flash doit lire l'intégralité du fichier en mémoire. Le téléchargement d'un fichier de 700 mb rendra Flash insensible au 30 secondes avant que le téléchargement ne démarre même.


Flash a-t-il vraiment lu le fichier entier dans la mémoire avant de télécharger? Jamais entendu parler de ça. Y a-t-il un DOC autour de décrire le problème?


Je ne suis pas sûr de votre réponse comme sur le Page d'accueil Plupload Vous pouvez lire que la version flash est capable de Chunking de fichier.



0
votes

Avez-vous spécifiquement besoin qu'il soit deux morceaux x? Ou essayez-vous de résoudre les problèmes causés par le téléchargement de gros fichiers? (E.G. Impossible de redémarrer un téléchargement sur le côté client, le côté serveur se bloque lorsque l'ensemble du fichier est téléchargé et maintenu en mémoire tout à la fois)

recherche de composants de téléchargement de téléchargement. Cela dépend des technologies avec lesquelles vous travaillez sur quel composant vous préférerez JSP, ASP.NET, etc.

http://krystalware.com/products/slickupload/ Celui-ci est un produit côté serveur Voici quelques points supplémentaires à divers téléchargeurs http://weblogs.asp.net/jgalloway/archive/2008/01/08/glarge-file-uploads-in-asp-net.aspx

Certains essaient de gérer la mémoire sur le serveur, par exemple. Donc, l'ensemble du fichier énorme n'est pas en mémoire à la fois, certains essaient de gérer l'expérience latérale du client.


1 commentaires

Quelle est la technologie frontale derrière ces "composants de téléchargement de streaming" comme Slickupload? Sont-ils capables de manipuler des fichiers avant de télécharger?



3
votes

Vous pouvez essayer Plupload . Il peut être configuré pour vérifier tout ce que l'exécution est disponible sur le côté des utilisateurs, que ce soit - Flash, Silverlight, HTML5, des engrenages, etc., et utilisez l'une étant donné que les fonctionnalités requises sont d'abord. Entre autres choses, il prend en charge la redimensionnement de l'image ( sur le côté des utilisateurs, conservant des données EXIF ​​(!) ), téléchargement de flux et de multipart et de chunking. Les fichiers peuvent être chuntés sur le côté des utilisateurs et envoyé à un gestionnaire de serveur chunk-by-Chunk (nécessite des soins supplémentaires sur le serveur), de sorte que les gros fichiers puissent être téléchargés sur un serveur ayant une limite de fichiers maximum définie sur une valeur beaucoup plus basse. Puis leur taille, par exemple. Et plus.

Certaines lignes prennent en charge HTTPS, je crois, certains ont besoin de tests. Quoi qu'il en soit, les développeurs exposés sont assez réactifs ces jours-ci. Donc, vous pourriez au moins essayer;)


0 commentaires