Especificar nombre de archivo para PDF dinámico en asp.net


¿Cómo puedo especificar el nombre del archivo al descargar datos en el flujo de respuesta?

Ahora mismo estoy haciendo lo siguiente:

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

Con el código anterior, obtengo "foo.aspx.pdf " como el nombre de archivo a guardar. Me parece recordar ser capaz de añadir un encabezado a la respuesta para especificar el nombre de archivo a guardar.

Author: Josh Bush, 2008-09-16

5 answers

Agregue una disposición de contenido al encabezado:

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
 54
Author: Ryan Farley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-07 01:24:05

FYI... si utiliza " inline "en lugar de" attachment " el archivo se abrirá automáticamente en IE. En lugar de preguntar al usuario con un diálogo Abrir/Guardar.

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
 17
Author: EMR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-15 21:21:47
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
 15
Author: Sklivvz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 16:10:04

Por alguna razón, la mayoría de las respuestas que hay no parecen siquiera intentar codificar el valor del nombre del archivo. Si el archivo contiene espacios, punto y coma o comillas, puede que no aparezca correctamente.

Parece que puede utilizar el ContentDisposition clase para generar un valor de encabezado correcto:

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

Usted puede comprobar hacia fuera el código fuente para ContentDisposition.ToString() para confirmar que está tratando de codificarlo correctamente.

Advertencia : Esto parece bloquearse cuando el nombre del archivo contiene un guión (no un guion). No me he molestado en investigar esto todavía.

 2
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-14 03:42:05
 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
 1
Author: Kibbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 16:11:32