Harika bir soru ... ve daha fazla detayı hak ediyor. Kendimi burada ilginç bir durumun sonucu olarak buluyorum. MVC3 / C # ortamı üzerinden bazı pdf eklerini teslim ediyorduk. Kodumuz yayınlandı ve müşterilerimizden indirmelerin Chrome kullanırken garip davrandığını ve dosya türünün 'pdf-, attachment.pdf-, attachment' biçimine dönüştürüldüğünü gösteren bazı yanıtlar almaya başladık. Evet ... anladın ... her şeyi. Yani, sadece 'pdf' olarak yeniden yazılabilir ve dosya hala bozulmadan kaydedilebilir, ama ne dağınıklık!
Bu nedenle, başlangıç durumunu tanımlamak için 'Content-Disposition' başlığını ayarlayıp ardından bir FileContentResult döndürüyoruz ...
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);
İyi görünüyordu. IE'de iyi çalıştı. Bu yüzden biraz araştırma yaptım ve bunun yerine FileStreamResult'u uygulamayı denedim (Content-Disposition setter'ı tutarak):
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));
Chrome'daki sorunu düzelttim! Hmmm ... ama neden heck'te mükemmel iyi bayt dizimi alıp yayınlamalıyım ve daha sonra dosya adının doğru çalışmasını sağlamak için bu yolla geri dönmeliyim?
Sonra Fiddler geldi.
FileContentResult ile, üstbilgide 2 Content-Disposition var. FileStreamResult ile 1 aldım.
FileContentResult, Dosya Adı sağlanırken bir Content-Disposition üstbilgisi ekler ve Chrome bu üstbilginin katlarını bir hata olarak görür.
Garip bir tepki ... ama kesinlikle bilmek iyi.
System.Web.MimeMapping.GetMimeMapping(filename)
sürümünde, mime türünü kolayca erişemezseniz toplamak için kullanabilirsiniz .