如何为ASP.NET中的目录中的所有文件创建下载链接?

时间:2015-08-18 18:37:55

标签: c# asp.net-mvc file-io download

我的目录C:\Source\SomeDirectory\包含任意数量的.pdf.txt个文件。我需要在我的ASP.NET网页上显示这些文件,并让每一个文件都是可下载的链接,例如:

downloadable links

其中每个都是.pdf或.txt。

如何为这些文件中的每一个创建链接?我知道他们都将在同一个目录中。我尝试了Returning a file to View/Download in ASP.NET MVC之类的东西,但这只返回一个文件?

相反,我需要返回一堆可下载的文件,并在我的页面上为其他普通的HTML元素提供链接。我怎样才能做到这一点?

编辑:我已经编写了使用DirectoryInfo(path).GetFiles()获取这些文件列表的代码。我将每个fileName及其filePath存储到我的viewmodel中的对象列表中,并将其传递到我的视图中。我可以使用这些属性作为参数来进行下载吗?

显示如下:

<ul>
    <li><a href="@FileList[0].Path"><@FileList[0].FileName</a></li>
    <li><a href="@FileList[1].Path"><@FileList[1].FileName</a></li>
    <li><a href="@FileList[2].Path"><@FileList[2].FileName</a></li>
</ul>

2 个答案:

答案 0 :(得分:2)

我最终做的是在IIS中向我的Web应用程序的根目录添加虚拟目录。我将其称为TestClassicWeb并将其路径设置为具有文件的本地目录。

有关从页面获取文件的帮助,请参阅以下内容:

<强>型号:

public class DisplayViewModel
{
    public List<DownloadableFile> FileList{ get; set; }
}

public class DownloadableFile
{
    public string FileName { get; set; }
    public string Path { get; set;}
}

<强>控制器:

using System.Collections.Generic;   //for "List" type
using System.IO;    //GetFiles()

/* ... */

//identify the virtual path
string filePath = "/TestClassicWeb/Reports/SethRollins";

//map the virtual path to a "local" path since GetFiles() can't use URI paths
DirectoryInfo dir = new DirectoryInfo(Server.MapPath(quicklinksPath));

//Get all files (but not any subdirectories) in the folder specified above
FileInfo[] files = dir.GetFiles()

//iterate through each file, get its name and set its path, and add to my VM
foreach (FileInfo file in files )
{
    DownloadableFile newFile = new DownloadableFile();
    newFile.FileName = Path.GetFileNameWithoutExtension(file.FullName);     //remove the file extension for the name
    newFile.Path = filePath + file.Name;                        //set path to virtual directory + file name
    vm.FileList.Add(newFile);                                       //add each file to the right list in the Viewmodel
}

return (vm);

查看:

<ul>
    @foreach (DownloadableFile file in Model.FileList)
    {
        <li><a target="_blank" href="@file.Path">@file.FileName</a></li>
    }
</ul>

感谢评论中的帮助!

答案 1 :(得分:0)

如评论中所述,您可以将绝对路径转换为虚拟路径, 您也可以设置下载属性以供下载

<a href="/images/myw3schoolsimage.jpg" download>

根据W3School

  

download属性指定当用户单击超链接时将下载目标。

     

仅当设置了href属性时才使用此属性。

     

属性的值将是下载文件的名称。允许值没有限制,浏览器会自动检测正确的文件扩展名并将其添加到文件中(.img,.pdf,.txt,.html等)。

     

如果省略该值,则使用原始文件名。

虽然这是有限的,因为有些浏览器不完全支持它。