2011-01-15 6 views
0

J'ai besoin de la prise en charge du téléchargement de fichiers volumineux dans mon application hébergée (godaddy) support trust asp.net.
Il est évident qu'il doit être réactif avec une indication de progression, donc la gestion du flux est importante.Téléchargement de fichiers volumineux de confiance moyenne dans Asp.Net

Tout cela semble assez simple et fonctionne bien en toute confiance:
1.Ecrivez un HttpModule qui écoute les téléchargements de fichiers.
2.Obtenez l'objet HttpWorkerRequest à partir du contexte à l'aide de la réflexion.
3.Write en flux à un FileStream

Tout cela est très bien et bon, sauf que je continue à recevoir des exceptions d'autorisation lorsque vous essayez d'obtenir l'objet HttpWorkerRequest du contexte en fiducie moyen. Que j'utilise la réflexion ou que j'utilise System.IServiceProvider.GetService() pour obtenir l'objet (qui utilise clairement la réflexion), j'obtiens la même erreur.

J'ai également essayé d'utiliser System.Web.HttpPostedFile. Il a une propriété InputStream. Mais il semble que cet objet télécharge le fichier entier à l'initialisation, donc pas bon. J'ai fait des recherches googled fatigué, et ne peux pas trouver une autre alternative.

Même si elle est un risque de sécurité pour permettre aux utilisateurs ont l'objet HttpWorkerRequest, sûrement le cadre fournit une autre façon de gérer le flux de fichiers lorsque method = « POST » et enctype = « multipart/form-data »

Toutes les idées seraient grandes
Merci

Répondre

0

Vous pouvez également essayer de lire context.Request.InputStream.

+0

J'ai donné un coup de feu. Au moment où j'ai essayé de lire() à partir du flux, le navigateur a téléchargé le fichier entier. Donc, il défait un peu le but. – johnDisplayClass

+0

@soundlyannoyed, comment lisez-vous le flux? Vous ne devez pas charger le flux entier dans un tampon. Vous devez le lire en morceaux et écrire immédiatement les morceaux dans un autre flux (par exemple un flux de fichier). –

+0

Oui. Je lis en morceaux. 4096 octets à la fois pour être précis. Appeler la méthode Read() semble faire son boulot dans la mesure où elle me nourrit par morceaux. Mais avant de renvoyer ce premier bloc, le framework extrait le fichier entier du navigateur sans mon consentement. Avoir du sens? – johnDisplayClass

Questions connexes