2008-09-01 3 views
23

Каков наилучший способ реализовать с веб-страницы действие загрузки с помощью asp.net 2.0?Как реализовать загрузку файла в asp.net

Файлы журнала для действия создаются в каталоге с именем [Application Root]/Logs. У меня есть полный путь и вы хотите предоставить кнопку, которая при нажатии будет загружать файл журнала с сервера IIS на локальный компьютер пользователей.

+0

Можно ли использовать Response.TransmitFile (для небольшого файла? – 2008-09-18 13:08:55

ответ

33

ли эта помощь:

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.

+7

КЛЮЧЕВАЯ часть этого - Response.End() - без него вы получите изредка коррумпированные загрузки, сломанные цифровые подписи, всевозможные странности – 2009-04-21 04:54:37

+0

Он не работает с файлами PNG. Как это сделать? – 2011-07-12 12:48:17

10

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(); 
} 


Обновление:

Исходный код

Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name); 

имеет "встроенный; вложение" т.е. два значения для содержимого утилизации.

Не знаю, когда именно это началось, но в Firefox только имя файла не отображалось. Появится окно загрузки файла с именем веб-страницы и ее расширением (pagename.aspx). После загрузки, если вы переименуете его обратно в текущее имя; файл открывается успешно.

По состоянию на this page, он действует на Первый пришел первым Подается основанием. Изменение значения до attachment только решило проблему.

PS: Я не уверен, что это лучшая практика, но проблема решена.

Смежные вопросы