如何在IISExpress中发布App后下载文件

时间:2015-01-23 07:09:36

标签: c# asp.net-mvc-4 iis download

美好的一天。 我想从我的服务器中的物理路径下载文件。当我运行我的应用程序通过vs2012它的工作greate,我看到物理路径中的文件列表。但是当我在服务器上发布应用程序时,该文件不在列表中。我需要确保有任何物理路径,但文件不应存储在应用程序包中

这里代码:

 public ActionResult NIRInfo()
{
    List<string> filesList = new List<string>();
    var dir = new System.IO.DirectoryInfo(@"Z:\Docs");
    System.IO.FileInfo[] fileNames = dir.GetFiles("*.*");
    var xow = from i in db.NIRs where i.Id == id select i.File;
    foreach (var i in xow)
    {
        fileNames = dir.GetFiles(i);
        foreach (var f in fileNames)
        {
            filesList.Add(f.Name);
        }
        ViewData["fList"] = filesList;
    }
    return View(nir);

}

和类下载的代码

public FileResult Download(string Name)
{
    return File(@"Z:\Docs\" + Name, MediaTypeNames.Application.Octet, Name); 
}

和代码:

                        @{ var fList = ViewData["fList"] as List<string>;}

                        @if (ViewData["fList"] != null)
                        {
                            <table>
                                <div style="border-top: #444444 1px solid"></div>
                                <b style="font-weight: normal">Files: </b>
                                <br />
                                <div style="border-top: #444444 1px solid"></div>
                                @foreach (var f in fList)
                                {
                                    <a href="@Url.Action("Download", "NIR", new { Name = @f })">@f
                                        <br />
                                    </a> 
                                }
                            </table>
                        }

1 个答案:

答案 0 :(得分:0)

假设您在本地计算机上为文件指定的路径与服务器上的路径不同。例如,在本地计算机上,文件位于“Z:\ Docs”中,但在服务器上可能是“C:\ Docs”。

由于您正在对应用程序中的位置进行硬编码,因此无法在应用程序发布后对其进行更改,您必须在应用程序中更改它,然后使用正确的文件路径重新发布它。服务器

这是一个单调乏味的过程,我建议您将文件的位置添加到web.config中,并使用web.config中的值作为文件的路径。这意味着您可以将站点发布到任何服务器,使用文件的路径,您只需调整web.config中的路径,而无需每次都重新发布该站点。

您可以将密钥添加到web.config的<appSettings>部分。像这样

<add key="DownloadDocumentsPath" value="C:\Docs" />

然后在您的代码中,您可以只读取web.config中的值,这会将您的NIRInfo方法更改为:

public ActionResult NIRInfo()
{
    List<string> filesList = new List<string>();

    string fileDownloadPath =   System.Configuration.ConfigurationManager.AppSettings["DownloadDocumentsPath"];

    var dir = new System.IO.DirectoryInfo(@fileDownloadPath );
    System.IO.FileInfo[] fileNames = dir.GetFiles("*.*");
    var xow = from i in db.NIRs where i.Id == id select i.File;
    foreach (var i in xow)
    {
        fileNames = dir.GetFiles(i);
        foreach (var f in fileNames)
        {
            filesList.Add(f.Name);
        }
        ViewData["fList"] = filesList;
    }
    return View(nir);
}

你的下载方法是这样的:

public FileResult Download(string Name)
{
    string fileDownloadPath =     System.Configuration.ConfigurationManager.AppSettings["DownloadDocumentsPath"];
    return File(@fileDownloadPath + Name, MediaTypeNames.Application.Octet, Name); 
}