Pergunta

Como posso especificar o nome do arquivo ao despejar 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 nome do arquivo para salvar.Parece que me lembro de poder adicionar um cabeçalho à resposta para especificar o nome do arquivo a ser salvo.

Foi útil?

Solução

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

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

Outras dicas

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));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");

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

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

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

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

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

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top