it-swarm-pt.tech

Especificando o nome do arquivo para dinâmico PDF no asp.net

Como posso especificar o nome do arquivo ao descarregar dados no fluxo de resposta?

No momento, estou fazendo o seguinte:

byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";            
Response.BinaryWrite(data);
Response.End();

Com o código acima, recebo "foo.aspx.pdf" como o nome do arquivo a ser salvo. Lembro-me de poder adicionar um cabeçalho à resposta para especificar o nome do arquivo a ser salvo.

33
Josh Bush

Adicione uma disposição de conteúdo ao cabeçalho:

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
57
Ryan Farley

Para sua informação ... se você usar "inline" em vez de "anexo", o arquivo será aberto automaticamente no IE. Em vez de solicitar ao usuário uma caixa de diálogo Abrir/Salvar.

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
18
EMR
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
15
Sklivvz

Por alguma razão, a maioria das respostas disponíveis nem parece codificar o valor do nome do arquivo. Se o arquivo contiver espaços, ponto e vírgula ou aspas, ele pode não ser exibido corretamente.

Parece que você pode usar a classe ContentDisposition para gerar um valor de cabeçalho correto:

Response.AppendHeader("Content-Disposition", new ContentDisposition
{
    FileName = yourFilename
}.ToString());

Você pode conferir o código fonte de ContentDisposition.ToString() para confirmar que está tentando codificá-lo corretamente.

Aviso : parece travar quando o nome do arquivo contém um traço (não um hífen). Ainda não me incomodei em investigar isso.

2
Sam
 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
1
Kibbee