Gran pregunta ... y merece más detalles. Me encuentro aquí como resultado de una situación interesante. Estábamos entregando algunos archivos adjuntos en PDF a través del entorno MVC3 / C #. Nuestro código se lanzó y comenzamos a recibir algunas respuestas de nuestros clientes de que las descargas se comportaban de manera extraña cuando usaban Chrome y que el tipo de archivo se convertía a 'pdf-, attach.pdf-, adjunto'. Sí ... lo tienes ... todo. Entonces, uno podría reescribirlo para que solo sea 'pdf' y el archivo aún se guardaría intacto, ¡pero qué desastre!
Entonces, para describir la situación inicial, estábamos configurando el encabezado 'Content-Disposition' y luego devolviendo un FileContentResult ...
var cd = new System.Net.Mime.ContentDisposition
{
FileName = result.Attachment.FileName,
Inline = false
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(result.Attachment.Data, MimeExtensionHelper.GetMimeType(result.Attachment.FileName), result.Attachment.FileName);
Parecía bueno Funcionó bien en IE. Así que investigué un poco e intenté implementar FileStreamResult en su lugar (manteniendo el configurador Content-Disposition):
MemoryStream dataStream = new MemoryStream();
dataStream.Write(result.Attachment.Data, 0, result.Attachment.Data.Length);
dataStream.Position = 0;
return new FileStreamResult(dataStream, MimeExtensionHelper.GetMimeType(result.Attachment.FileName));
Se solucionó el problema en Chrome! Hmmm ... pero ¿por qué debería tener que tomar mi matriz de bytes perfectamente buena y transmitirla y luego devolverla a través de esto para que el nombre del archivo funcione correctamente?
Luego vino el violinista.
Con FileContentResult, obtuve 2 Disposiciones de contenido en el encabezado. Con FileStreamResult, obtuve 1.
FileContentResult agrega un encabezado Content-Disposition al proporcionar el Nombre del archivo y Chrome considera que los múltiplos de este encabezado son un error.
Reacción extraña ... pero definitivamente una que es bueno saber.
System.Web.MimeMapping.GetMimeMapping(filename)
para recopilar el tipo mime si no puedes acceder a él fácilmente.File
resultado significa establecer suFileDownloadName
propiedad, que establece losContent-Disposition
encabezados por usted. Y admite correctamente los nombres de archivo utf-8, que no son deContentDisposition
clase auxiliar (consulte mi comentario aquí para obtener más detalles).