Как реализовать загрузку файла в asp.net
Каков наилучший способ реализовать с веб-страницы действие загрузки с помощью asp.net 2.0?
Файлы журнала для действия создаются в каталоге с именем [Application Root]/Logs. У меня есть полный путь и вы хотите предоставить кнопку, которая при нажатии будет загружать файл журнала с сервера IIS на локальный компьютер пользователей.
Ответы
Ответ 1
Помогает ли это:
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 - это принятый способ отправки больших файлов вместо Response.WriteFile.
Ответ 2
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();
}
Update:
Начальный код
Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name);
имеет "встроенное вложение", то есть два значения для Content Disposition.
Не знаю, когда именно это началось, но в Firefox только не появилось правильное имя файла. Появится окно загрузки файла с именем веб-страницы и ее расширением (pagename.aspx). После загрузки, если вы переименуете его обратно в текущее имя; файл успешно открывается.
По эта страница, она работает на основе First Come First Served. Изменение значения до attachment
разрешило проблему.
PS: Я не уверен, что это лучшая практика, но проблема решена.