我正在开发一个项目,该项目需要让用户从服务器上的静态位置下载pdf。我正在阅读this网站上的说明,这是一篇旧帖子,我注意到他们在更新中指出微软的MVC框架早已包含在内,而Action Result允许他们讨论相同的功能,从而使其过时,我看起来有点在线,但无法找到任何讨论这种内置功能的资源。如果有人有任何链接或其他信息讨论这一点,这将是非常有帮助的。感谢。
答案 0 :(得分:1)
您可以使用FileResult
代替ActionResult
在响应中返回文件流。例如,请在此处查看Can an ASP.Net MVC controller return an Image?问题。
答案 1 :(得分:1)
public ActionResult Show(int id) {
Attachment attachment = attachmentRepository.Get(id);
return new DocumentResult { BinaryData = attachment.BinaryData,
FileName = attachment.FileName };
}
使用此自定义类,可能类似于FileResult:
public class DocumentResult : ActionResult {
public DocumentResult() { }
public byte[] BinaryData { get; set; }
public string FileName { get; set; }
public string FileContentType { get; set; }
public override void ExecuteResult(ControllerContext context) {
WriteFile(BinaryData, FileName, FileContentType);
}
/// <summary>
/// Setting the content type is necessary even if it is NULL. Otherwise, the browser treats the file
/// as an HTML document.
/// </summary>
/// <param name="content"></param>
/// <param name="filename"></param>
/// <param name="fileContentType"></param>
private static void WriteFile(byte[] content, string filename, string fileContentType) {
HttpContext context = HttpContext.Current;
context.Response.Clear();
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.ContentType = fileContentType;
context.Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + "\"");
context.Response.OutputStream.Write(content, 0, content.Length);
context.Response.End();
}
}
答案 2 :(得分:0)
返回FileResult
。