Comment implémenter un téléchargement de fichier dans asp.net
Question
Quelle est la meilleure façon de mettre en œuvre, à partir d'une page Web, une action de téléchargement à l'aide d'asp.net 2.0 ?
Les fichiers journaux d'une action sont créés dans un répertoire appelé [Application Root]/Logs.J'ai le chemin complet et je souhaite fournir un bouton qui, une fois cliqué, téléchargera le fichier journal du serveur IIS sur l'ordinateur local de l'utilisateur.
La solution
Est-ce que cela aide:
http://www.west-wind.com/weblog/posts/76293.aspx
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition","attachment; filename=logfile.txt");
Response.TransmitFile( Server.MapPath("~/logfile.txt") );
Response.End();
Response.TransmitFile est le moyen accepté pour envoyer des fichiers volumineux, au lieu de Response.WriteFile.
Autres conseils
http://forums.asp.net/p/1481083/3457332.aspx
string filename = @"Specify the file path in the server over here....";
FileInfo fileInfo = new FileInfo(filename);
if (fileInfo.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Flush();
Response.TransmitFile(fileInfo.FullName);
Response.End();
}
Mise à jour:
Le code initial
Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name);
a "en ligne; pièce jointe", c'est-à-diredeux valeurs pour la disposition du contenu.
Je ne sais pas quand exactement ça a commencé, mais dans Firefox seulement le nom de fichier correct n'apparaissait pas.La boîte de téléchargement du fichier apparaît avec le nom de la page Web et son extension (nom de la page.aspx).Après le téléchargement, si vous le renommez avec son nom réel ;le fichier s'ouvre avec succès.
Selon cette page, il fonctionne sur Le principe du premier arrivé, premier servi.Changer la valeur en attachment
seulement résolu le problème.
PS :Je ne sais pas si c'est la meilleure pratique mais le problème est résolu.