¿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.
Agregue una disposición de contenido al encabezado:
Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
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));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
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.
Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")