如何在 IISExpress 中发布应用程序后下载文件
HOW to download file, after publish App in IISExpress
美好的一天。
我想从我服务器的物理路径下载文件。当我 运行 我的应用程序通过 vs2012 时,它的工作变得更好,我看到了来自物理路径的文件列表。但是当我在服务器上发布应用程序时,该文件不在列表中。我需要确保有任何物理路径,但文件不应存储在应用程序包中
此处代码:
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);
}
和代码class下载
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>
}
A 假定您在本地计算机上为文件指定的路径与服务器上的路径不同。这意味着例如在您的本地计算机上文件位于 "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);
}
美好的一天。 我想从我服务器的物理路径下载文件。当我 运行 我的应用程序通过 vs2012 时,它的工作变得更好,我看到了来自物理路径的文件列表。但是当我在服务器上发布应用程序时,该文件不在列表中。我需要确保有任何物理路径,但文件不应存储在应用程序包中
此处代码:
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);
}
和代码class下载
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>
}
A 假定您在本地计算机上为文件指定的路径与服务器上的路径不同。这意味着例如在您的本地计算机上文件位于 "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);
}