Câu hỏi tuyệt vời ... và xứng đáng được biết thêm chi tiết. Tôi thấy mình ở đây là kết quả của một tình huống thú vị. Chúng tôi đã cung cấp một số tệp đính kèm pdf thông qua môi trường MVC3 / C #. Mã của chúng tôi đã được phát hành và chúng tôi bắt đầu nhận được một số phản hồi từ khách hàng của mình rằng các bản tải xuống hoạt động kỳ lạ khi họ đang sử dụng Chrome và loại tệp đang được chuyển đổi thành 'pdf-, tệp đính kèm.pdf-, tệp đính kèm'. Yup ... bạn hiểu rồi ... toàn bộ. Vì vậy, người ta có thể viết lại thành 'pdf' và tệp vẫn sẽ lưu nguyên vẹn, nhưng thật là một mớ hỗn độn!
Vì vậy, để mô tả tình huống ban đầu, chúng tôi đã đặt tiêu đề 'Xử lý nội dung' sau đó trả lại 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);
Có vẻ tốt. Hoạt động tốt trong IE. Vì vậy, tôi đã thực hiện một số nghiên cứu và thử triển khai FileStreamResult thay vào đó (giữ bộ cài đặt Xử lý nội dung):
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));
Nó đã khắc phục sự cố trong Chrome! Hmmm ... nhưng tại sao tôi phải lấy mảng byte hoàn toàn tốt của mình và truyền phát nó và sau đó trả lại qua đây để tên tệp hoạt động đúng không?
Sau đó đến Fiddler.
Với FileContentResult, tôi đã nhận được 2 Bố cục nội dung trong tiêu đề. Với FileStreamResult, tôi đã nhận được 1.
FileContentResult nối thêm tiêu đề Xử lý nội dung khi cung cấp Tên tệp và Chrome coi bội số của tiêu đề này là một lỗi.
Phản ứng kỳ lạ ... nhưng chắc chắn là một điều tốt để biết.
System.Web.MimeMapping.GetMimeMapping(filename)
để thu thập loại mime nếu bạn không thể truy cập dễ dàng.