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.Fileresultado significa establecer suFileDownloadNamepropiedad, que establece losContent-Dispositionencabezados por usted. Y admite correctamente los nombres de archivo utf-8, que no son deContentDispositionclase auxiliar (consulte mi comentario aquí para obtener más detalles).