web-development-kb-es.site

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

¿Cómo puedo especificar el nombre de archivo cuando descargo datos en la secuencia de respuesta?

En este momento 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 nombre de archivo para guardar. Parece recordar haber podido agregar un encabezado a la respuesta para especificar el nombre de archivo para guardar.

33
Josh Bush

Agregue una disposición de contenido al encabezado:

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

FYI ... si usa "en línea" en lugar de "archivo adjunto", 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));
18
EMR
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
15
Sklivvz

Por alguna razón, la mayoría de las respuestas no parecen ni siquiera intentar codificar el valor del nombre del archivo. Si el archivo contiene espacios, puntos y comas o comillas, es posible que no se vea correctamente.

Parece que puede usar la clase ContentDisposition para generar un valor de encabezado correcto:

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

Puede consultar el código fuente de ContentDisposition.ToString() para confirmar que está intentando codificarlo correctamente.

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

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