zoukankan      html  css  js  c++  java
  • mvc 下载示例(from AllInOne Code Framework)

      本例实现了浏览服务器端文件和选中文件列表中某一文件进行下载。

      FileController:

      

    代码
    public class FileController : Controller
        {
            
    // Action for list all the files in "~/App_Data/download" directory
            public ActionResult List()
            {

                
    // Retrive file list
                DirectoryInfo dir = new DirectoryInfo(Server.MapPath("~/App_Data/download/"));

                
    // Filter it via LINQ to Object
                var files = from f in dir.GetFiles("*.*", SearchOption.TopDirectoryOnly)
                            
    where f.Extension != "exe"
                            select f;
                
                
    // Call the corresponding View
                return View(files.ToList());
            }

            
    // Action for return the binary stream of a specified file
            public ActionResult Download(string fn)
            {
                
    // Check whether requested file is valid
                string pfn = Server.MapPath("~/App_Data/download/" + fn);
                
    if (!System.IO.File.Exists(pfn))
                {
                    
    throw new ArgumentException("Invalid file name or file not exists!");
                }

                
    // Use BinaryContentResult to encapsulate the filecontent and return it
                return new BinaryContentResult()
                {
                    FileName 
    = fn,
                    ContentType 
    = "application/octet-stream",
                    Content 
    = System.IO.File.ReadAllBytes(pfn)
                };

            }
        }

      BinaryContentResult 类定义:

      

    代码
        public class BinaryContentResult : ActionResult
        {
            
    // Default constructor
            public BinaryContentResult()
            {
            }

            
    // Properties for encapsulating http headers
            public string ContentType { getset; }
            
    public string FileName { getset; }
            
    public byte[] Content { getset; }

            
    // Underlying code which set the httpheaders and output file content
            public override void ExecuteResult(ControllerContext context)
            {

                context.HttpContext.Response.ClearContent();
                context.HttpContext.Response.ContentType 
    = ContentType;

                context.HttpContext.Response.AddHeader(
    "content-disposition",

                
    "attachment; filename=" + FileName);

                context.HttpContext.Response.BinaryWrite(Content);
                context.HttpContext.Response.End();
            }
        }

      由上面的定义我们可以看到,我们可以重载不同的ActionResult。ActionResult类定义如下:

    代码
    namespace System.Web.Mvc
    {
        
    // 摘要:
        
    //     Encapsulates the result of an action method and is used to perform a framework-level
        
    //     operation on the action method's behalf.
        public abstract class ActionResult
        {
            
    protected ActionResult();

            
    // 摘要:
            
    //     Enables processing of the result of an action method by a custom type that
            
    //     inherits from System.Web.Mvc.ActionResult.
            
    //
            
    // 参数:
            
    //   context:
            
    //     The context within which the result is executed.
            public abstract void ExecuteResult(ControllerContext context);
        }
    }
      我感觉这个示例比较好,思路很清晰。此示例对我感觉最深的是提供一个mvc下载文件的解决方案,还有我们可以自己定义一个能满足自己需要的ActionResult类。
  • 相关阅读:
    网络流入门
    Sereja and Swaps(贪心+暴力枚举区间)
    multiset
    欧拉路
    整除分块
    蓝魔法师
    选点
    F. Tree with Maximum Cost(换根)
    “db2执行sql语句,注释没了”的解决办法
    Mybatis中的自带Mapper方法
  • 原文地址:https://www.cnblogs.com/BlueWoods/p/1883890.html
Copyright © 2011-2022 走看看