Pertanyaan bagus ... dan perlu detail lebih lanjut. Saya menemukan diri saya di sini sebagai akibat dari situasi yang menarik. Kami mengirimkan beberapa lampiran pdf melalui lingkungan MVC3 / C #. Kode kami dirilis dan kami mulai mendapatkan beberapa tanggapan dari klien kami bahwa unduhan berperilaku aneh saat mereka menggunakan Chrome dan jenis file diubah menjadi 'pdf-, attachment.pdf-, attachment'. Yup ... Anda mengerti ... semuanya. Jadi, seseorang dapat menulis ulang menjadi 'pdf' dan file tersebut akan tetap tersimpan utuh, tapi sungguh berantakan!
Jadi, untuk menggambarkan situasi awal, kami menyetel header 'Content-Disposition' kemudian mengembalikan 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);
Tampak bagus. Bekerja dengan baik di IE. Jadi saya melakukan penelitian dan mencoba menerapkan FileStreamResult sebagai gantinya (menjaga penyetel 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));
Ini memperbaiki masalah di Chrome! Hmmm ... tapi mengapa sih harus saya harus mengambil array byte saya yang sangat baik dan mengalirkannya dan kemudian mengembalikannya melalui ini untuk mendapatkan nama file berfungsi dengan benar?
Lalu datanglah Fiddler.
Dengan FileContentResult, saya mendapat 2 Content-Dispositions di header. Dengan FileStreamResult, saya mendapat 1.
FileContentResult menambahkan header Content-Disposition saat memberikan Nama File dan Chrome menganggap kelipatan header ini sebagai kesalahan.
Reaksi yang aneh ... tapi yang pasti bagus untuk diketahui.
System.Web.MimeMapping.GetMimeMapping(filename)
untuk mengumpulkan jenis pantomim jika Anda tidak dapat mengaksesnya dengan mudah.File
hasil berarti menyetelFileDownloadName
propertinya, yang menyetelContent-Disposition
header untuk Anda. Dan itu benar mendukung nama file utf-8, yang tidakContentDisposition
membantu kelas (lihat komentar saya di sini untuk lebih jelasnya).