2010-09-15 6 views
3

Vu le code suivant qui est extrêmement générique, j'espérais que quelqu'un pourrait me dire un peu ce qui se passe dans les coulisses ...IIS asp.net mvc partiel? fichier télécharger

[HttpPost] 
public ActionResult Load(Guid regionID, HttpPostedFileBase file) 
{ 
    if (file.ContentLength == 0) 
     RedirectToAction("blablabla....."); 

    var fileBytes = new byte[file.ContentLength]; 
    file.InputStream.Read(fileBytes, 0, file.ContentLength); 
} 

Plus précisément, le fichier ne soit complètement téléchargé sur le serveur avant que ma méthode d'action est invoquée? Ou est-ce l'appel de la méthode file.InputStream.Read() qui provoque ou attend plutôt que le fichier entier soit téléchargé. Puis-je effectuer des lectures partielles sur le flux et avoir accès aux "morceaux" du fichier lors de son téléchargement? (Si le feu entier est téléchargé avant que ma méthode ne soit invoquée, alors il s'agit d'un point discutable.)

Est-ce que quelqu'un peut me donner quelques bonnes informations sur le fonctionnement interne ici. Y a-t-il une différence entre IIS6 ou II7 ici?

Merci,

Répondre

5

Le fichier while doit être envoyé au serveur avant que la méthode d'action est invoquée. Citation du documentation:

Les fichiers sont téléchargés dans MIME multipart /format form-data. Par par défaut, toutes les demandes, y compris le formulaire champs et les fichiers téléchargés, plus grand que 256 Ko sont mis en mémoire tampon sur le disque, plutôt que détenu dans la mémoire du serveur.

Vous pouvez spécifier la taille admissible maximale de la demande en accédant à la propriété maxRequestLength ou par le réglage de la maxRequestLength attribut de l'élément élément httpRuntime (ASP.NET Schéma des paramètres) dans le Machine.config ou Web.config fichier. Le par défaut est de 4 Mo.

La quantité de données qui est mise en tampon dans mémoire du serveur d'une demande, qui comprend le téléchargement de fichiers, peuvent être spécifiés en accédant à la propriété RequestLengthDiskThreshold ou en réglant le requestLengthDiskThreshold attribut du httpRuntime élément (ASP .NET Paramètres Schema) dans le fichier Machine.config ou Web.config.

La mémoire du serveur ne sera pas consommée sur le serveur mais le contenu du fichier sera mis en mémoire tampon sur le disque. Une fois que le client a envoyé le fichier entier, le pipeline ASP.NET appellera votre action de contrôleur et vous pourrez lire le flux de requête en morceaux et l'enregistrer dans un autre fichier qui sera l'emplacement définitif du fichier téléchargé. L'action ne peut pas être invoquée avant que le téléchargement du fichier ne soit terminé car il se peut qu'il y ait d'autres champs dans le multipart/form-data qui viennent après le fichier et ils ne seront pas affectés dans ce cas.