Est-il possible de « coup d'oeil » à un fichier alors qu'il est le téléchargement par HTTP sur une boîte de Windows?

StackOverflow https://stackoverflow.com/questions/2479390

Question

Je dois ajouter une fonction de transfert de fichiers vers un site Web ASP.NET et souhaite être en mesure de lire une petite partie du fichier sur le serveur pendant qu'il est encore en téléchargeant. Un coup d'oeil ou la fonction de type aperçu que je puisse déterminer le contenu et donner quelques informations à l'utilisateur alors qu'il est encore en téléchargeant (nous parlons ici de gros fichiers). Est-ce qu'il y a un moyen de faire ça? Je pense le pire des cas d'écrire un contrôle personnalisé qui télécharge un nombre fixe d'octets du fichier une fois choisi, puis sous les couvertures commence un téléchargement du fichier complet. Pas tout à fait sûr que même cela est possible, mais je suis à la recherche d'une solution plus élégante de toute façon ... Merci!

Était-ce utile?

La solution

On dirait que vous voulez éviter le « écran blanc de la mort » lors de téléchargements de fichiers volumineux. Si oui, vous voudrez peut-être regarder dans de contrôle RadUpload de Telerik, qui fournit une barre de progression pendant le téléchargement.

Si vous voulez rouler votre propre, je décompiler leur copie d'essai pour des idées. Je l'ai jeté un œil à la source de cette façon, et ils accomplissent la barre de progression grâce à une combinaison d'une HttpModule personnalisée et HttpHandler ainsi que leur contrôle. Le gestionnaire achemine le fichier dans un mode en continu tandis que le module fournit l'information « pour cent complet » - ou dans l'autre sens; il a été quelques années que je l'ai regardé.

Modifier

  

En fait, je suis en train de faire du traitement côté serveur que le fichier est encore en cours de téléchargement. Je veux importer des données utilisateur via HTTP, mais que vous souhaitez présenter à l'utilisateur aperçu / options de la façon dont nous allons traiter leurs données alors que le fichier est encore en téléchargeant (colonne définitions, etc.). Peu importe ce que, nous prendrons le fichier tel qu'il est, de sorte que le téléchargement n'a pas besoin d'être interrompu. Étant donné que je veux réellement interaction pendant le téléchargement en fonction de la lecture d'une partie relativement faible du fichier tel qu'il est en cours de téléchargement, recommanderiez-vous toujours la même approche?

Eh bien ... ce serait très difficile à faire, et il pourrait ne pas fonctionner cross-navigateur, mais il pourrait être fait avec cette approche.

Comme il est tout à fait possible de travailler avec le fichier entrant en tant que flux comme je l'ai mentionné, vous pourriez avoir votre traitement intial mise à jour un état dans le cadre de ce traitement de flux. Si vous ne traitez pas comme un flux, vous devez attendre le téléchargement complet du fichier avant de pouvoir faire quoi que ce soit avec elle.

Le problème est le suivant: lors du téléchargement de fichiers, vous ne pouvez pas avoir une interaction HTML plus. Le poste doit se poursuivre sans relâche ou le téléchargement échouera. Le contrôle ne fonctionne que je lié à tout cela parce que la plupart des navigateurs permettent javascript de continuer à exécuter et mettre à jour DOM pendant le poste.

Ainsi, afin de faire ce travail, vous devez mettre à jour un serveur côté standardisé état pendant le traitement de votre fichier dans le HttpModule, qui est transmis au client par l'intermédiaire d'appels XMLHttpRequest traités par le HttpHandler. Vous devez utiliser javascript / DOM pur pour mettre à jour l'interface utilisateur pour l'utilisateur.

Alors, comme je l'ai dit, il est complexe et probablement buggy cross-navigateur, mais il pourrait théoriquement se faire.

Il y a alernatives qui pourraient être plus stables, mais peut-être pas nécessairement réalisable: vous pourriez construire un contrôle ActiveX ou une application .NET Cliquez-Une fois que les pré-traite le fichier avant le téléchargement, et peut-être même transfère de manière asynchrone le tout fichier l'utilisateur continue la navigation. Certains utilisateurs peuvent ne pas aimer cette option, et je ne sais pas les détails de votre scénario de déploiement, mais il est une option.

Autres conseils

Il existe une méthode de HTTP de HEAD mais pas PEEK.

HEAD vous donnera des informations et des en-têtes sur le fichier.

Bien sûr, vous pouvez faire un gestionnaire de demande spéciale qui fait tout ce que vous voulez. Vous ne devez pas travailler avec des ressources statiques, vous pouvez créer dynamiquement une réponse que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top