□ 思路
点击一个链接,把该文件的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
});
}
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)
{
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.ActionLink("下载","DownloadFile",new {id = item.Id})
</td>
}
</table>
参考资料:
Download Files in ASP.NET MVC 3 using Controller
Action