Como implementar um download de arquivo em asp.net
Pergunta
Qual a melhor forma de implementar, a partir de uma página web, uma ação de download usando asp.net 2.0?
Os arquivos de log de uma ação são criados em um diretório chamado [Raiz do Aplicativo]/Logs.Eu tenho o caminho completo e quero fornecer um botão que, quando clicado, fará o download do arquivo de log do servidor IIS para o PC local do usuário.
Solução
Isso ajuda:
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 é a forma aceita de enviar arquivos grandes, em vez de Response.WriteFile.
Outras dicas
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();
}
Atualizar:
O código inicial
Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name);
tem "inline; anexo", ou seja,dois valores para Disposição de Conteúdo.
Não sei quando exatamente começou, mas no Firefox apenas o nome correto do arquivo não estava aparecendo.A caixa de download do arquivo aparece com o nome da página da web e sua extensão (nome da página.aspx).Após o download, se você renomeá-lo de volta ao nome real;arquivo é aberto com sucesso.
Conforme esta página, ele opera em Base de ordem de chegada.Alterando o valor para attachment
apenas resolveu o problema.
PS:Não tenho certeza se esta é a melhor prática, mas o problema foi resolvido.