思路
点击一个链接,把该文件的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>
到此这篇关于ASP.NET MVC实现文件下载的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。