显示文件名称和链接以在mvc中下载

时间:2013-01-30 14:54:56

标签: asp.net-mvc-3

我有保存在项目文件夹中的文件

D:\Maarjaa\Marjaa\Content\Uploads

现在我要显示这些文件的名称(不是完整的URL)

作为

lakes of kaghan.jpg
lakes of gilgit.jpg

不是

D:\Maarjaa\Marjaa\Content\Uploads\lakes of kaghan.jpg

此外,我想提供这些文件的下载链接,以便用户可以下载这些文件

2 个答案:

答案 0 :(得分:3)

许多不同的方法可以做到这一点。这是一个:

为您的文件创建一个类

public class Image
        {
            public string Name { get; set; }
            public string Path { get; set; }
        }

和视图模型类

public class ViewModel
        {
            public List<Image> Images { get; set; }
            public string Path { get; set; }
        }

然后在您的控制器中,填充视图模型以及列表中每个Image对象的名称和路径属性。您需要导入System.IO命名空间。

public ActionResult DisplayFilesForDownload( )
        {
            var viewModel = new ViewModel
            {
                Path = @"D:\Maarjaa\Marjaa\Content\Uploads", 
                Images = new List<Image>()
            };
            var paths = Directory.GetFiles(viewModel.Path).ToList();
            foreach (var path in paths)
            {
                var fileInfo = new FileInfo( path );
                var image = new Image
                {
                    Path = path, Name = fileInfo.Name
                };
                viewModel.Images.Add(image);
            }
            return View( viewModel);
        }

允许下载的方法。我假设你的所有文件都是图像。如果没有,只需根据需要调整MediaTypeName。

public FileResult Download(string filePath, string fileName)
        {
            var file = File(filePath, System.Net.Mime.MediaTypeNames.Image.Jpeg, fileName);
            return file;
        }

最后是观点。 Image.Name用于显示缩短的文件名,Image.Path用于告知下载方法从何处获取文件。

@model FullyQualified.Path.ToYour.ViewModel

@foreach (var image in Model.Images)
{
    <p>@Html.ActionLink(image.Name, "Download", "ControllerName", new{filePath = image.Path, fileName = image.Name}, null)</p>
}

希望这有助于您前进。

答案 1 :(得分:1)

我做到了,在我的视野中

 <ul>
            @foreach(var Item in(IEnumerable<Marjaa.Data.MultimediaFile>) ViewData["Files"]) 
            {

               <li><a href=" @Url.Content("~/Content/Uploads/" + System.IO.Path.GetFileName(Item.MultimediaFileUrl))">@System.IO.Path.GetFileName(Item.MultimediaFileUrl)</a> </li>
             }                
            </ul>

从我的控制器刚发送一个列表到视图

IList<MultimediaFile> list = d.MultimediaFiles.Where(l => l.MultmediaId == id).ToList();
        ViewData["Files"] = list;