Cả hai FileStreamResult
và FileContentResult
được kế thừa từ FileResult
được kế thừa từ ActionResult
. Vì vậy, bạn có thể trở lại hoặc là một loại từ một phương pháp trong đó có ActionResult
như kiểu trả
Nếu bạn đã có một dòng , bạn có thể sử dụng FileStreamResult
constructor để trả về một FileResult
public ActionResult Download()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var fileStream = new FileStream(f,FileMode.Open,FileAccess.Read);
return new FileStreamResult(fileStream, MimeMapping.GetMimeMapping(f));
}
Nếu bạn đã có một byte arrray, bạn có thể sử dụng FileContentResult
constructor để trả về một FileResult
public ActionResult Download()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var bytes = System.IO.File.ReadAllBytes(f);
return new FileContentResult(bytes, MimeMapping.GetMimeMapping(f));
}
Phương pháp Controller.File
có quá tải mà phải mất cả một mảng byte hay một dòng
public ActionResult Download()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var bytes = System.IO.File.ReadAllBytes(f);
return File(bytes, MimeMapping.GetMimeMapping(f));
}
public ActionResult Download2()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var fileStream = new FileStream(f, FileMode.Open, FileAccess.Read);
return File(fileStream, MimeMapping.GetMimeMapping(f));
}
Nếu trình duyệt có hỗ trợ để hiển thị các kiểu nội dung của phản ứng, phản ứng sẽ được hiển thị trong trình duyệt. Ví dụ, đối với mã trên, nó sẽ hiển thị nội dung pdf trong trình duyệt.
Có một quá tải khác của phương thức File
có tên tệp tải xuống mà hộp thoại lưu/tải xuống của trình duyệt sẽ sử dụng để người dùng có thể lưu máy tính cục bộ của mình và/hoặc mở.
public ActionResult Download4()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var fileStream = new FileStream(f, FileMode.Open, FileAccess.Read);
return File(fileStream, MimeMapping.GetMimeMapping(f),"MyfileNiceFileName.pdf");
}
Với điều này, người dùng sẽ nhận được lời nhắc tải xuống từ trình duyệt.
Khách hàng không thể nói sự khác biệt. Máy khách không thể tìm ra lớp .NET được sử dụng để gửi các byte tới trình duyệt. – usr
Điều gì sẽ xảy ra nếu tôi cần hiển thị tệp cho một phần cụ thể của trang web. Hiện tại, luồng phim sẽ hiển thị toàn bộ trang web. Chúng tôi có thể nhắm mục tiêu một khu vực nhỏ trong một trang không? – Unbreakable
Tôi đoán bạn có thể thử tải trong khung nội tuyến. Không bao giờ thử bản thân mình mặc dù – Shyju