zoukankan      html  css  js  c++  java
  • MVC实现文件下载

    □ 思路

    点击一个链接,把该文件的Id传递给控制器方法,遍历文件夹所有文件,根据ID找到对应文件,并返回FileResult类型。

    与文件相关的Model:

    namespace MvcApplication1.Models
    {
        public class FileForDownload
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Path { get; set; }
        }
    }

    写一个针对文件的帮助类,遍历指定文件夹的所有文件,返回FileForDownload集合类型。在项目根目录下创建Files文件夹,存放下载文件。

    using System.Collections.Generic;
    using System.IO;
    using System.Web.Hosting;
    using MvcApplication1.Models;
    
    namespace MvcApplication1.Helper
    {
        public class FileHelper
        {
            public List<FileForDownload> GetFiles()
            {
                List<FileForDownload> result = new List<FileForDownload>();
                DirectoryInfo dirInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/Files"));
    
                int i = 0;
                foreach (var item in dirInfo.GetFiles())
                {
                    result.Add(new FileForDownload()
                    {
                        Id = i + 1,
                        Name = item.Name,
                        Path = dirInfo.FullName + @"" + item.Name
                    });
                    i++;
                }
                return result;
            }
        }
    }

    HomeController中:

    using System;
    using System.Linq;
    using System.Web.Mvc;
    using MvcApplication1.Helper;
    
    namespace MvcApplication1.Controllers
    {
        public class HomeController : Controller
        {
            private FileHelper helper;
    
            public HomeController()
            {
                helper = new FileHelper();
            }
    
            public ActionResult Index()
            {
                var files = helper.GetFiles();
                return View(files);
            }
    
            public FileResult DownloadFile(string id)
            {
                var fId = Convert.ToInt32(id);
                var files = helper.GetFiles();
                string fileName = (from f in files
                    where f.Id == fId
                    select f.Path).FirstOrDefault();
                string contentType = "application/pdf";
                return File(fileName, contentType, "Report.pdf");
            }
        }
    }

    Home/Index.cshtml中:

    @model IEnumerable<MvcApplication1.Models.FileForDownload>
    
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <table>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Id)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.ActionLink("下载", "DownloadFile", new { id = item.Id })
                </td>
            </tr>
            
        }
    </table>

    参考资料
    Download Files in ASP.NET MVC 3 using Controller Action

  • 相关阅读:
    一些常用的 Git 进阶知识与技巧
    自动充值平台开发进程之联通卡密一最终实现
    自动充值平台开发进程之联通卡密一准备阶段
    自动充值平台开发进程之联通卡密一显示界面
    [注入] 突破 SESSION 0 隔离的远线程注入
    git 撤销 push 提交
    [C#] 获取时间戳(秒/毫秒)
    html判断浏览器是否支持,不支持则输出
    [C#] MD5 加密
    [Windows驱动开发] 进程的pid handle eprocess之间相互转换的方法
  • 原文地址:https://www.cnblogs.com/darrenji/p/3766720.html
Copyright © 2011-2022 走看看