Pregunta

¿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 nombre de archivo para guardar.Creo recordar haber podido agregar un encabezado a la respuesta para especificar el nombre del archivo a guardar.

¿Fue útil?

Solución

Agregue una disposición de contenido al encabezado:

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

Otros consejos

Para tu información...Si utiliza "en línea" en lugar de "archivo adjunto", el archivo se abrirá automáticamente en IE.En lugar de solicitar al usuario 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 ni siquiera parecen intentar codificar el valor del nombre del archivo.Si el archivo contiene espacios, punto y coma o comillas, es posible que no se muestre correctamente.

Parece que puedes usar el ContentDisposition clase para generar un valor de encabezado correcto:

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

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

Advertencia:Esto parece fallar cuando el nombre del 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 & ";")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top