美好的一天。 我想从我的服务器中的物理路径下载文件。当我运行我的应用程序通过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>
}
答案 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);
}