C# 生产服务器上的文件下载问题
我使用了以下代码从服务器下载文件,在开发和QA服务器中,每个浏览器都可以正常工作,但在投入生产时出现了一个错误。错误为System.IO.DirectoryNotFoundException路径部分不正确 使用的代码:C# 生产服务器上的文件下载问题,c#,asp.net,C#,Asp.net,我使用了以下代码从服务器下载文件,在开发和QA服务器中,每个浏览器都可以正常工作,但在投入生产时出现了一个错误。错误为System.IO.DirectoryNotFoundException路径部分不正确 使用的代码: protected void lnkDownload_Click(object sender, eventArgs e) { LinkButton lnkbtn = sender as LinkButton;
protected void lnkDownload_Click(object sender, eventArgs e)
{
LinkButton lnkbtn = sender as LinkButton;
GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow;
string filePath = ((HtmlInputHidden)gvFilesDetails.Rows[gvrow.RowIndex].FindControl("hdnFileLocation")).Value.ToString();
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filePath + "\"");
Response.TransmitFile(Server.MapPath("~/" + filePath));
Response.End();
}
这个问题似乎很奇怪,调试起来也很痛苦,因为它只发生在生产服务器中。
请帮助我。Server.MapPath将获取与虚拟路径对应的物理路径。请交叉检查您的应用程序服务器(生产) 这是一个我在生产中使用的代码,对我来说很好,你可以看看
protected void imgDownload_click(object sender, ImageClickEventArgs e)
{
ImageButton imgbtn = (ImageButton)sender;
GridViewRow row = (GridViewRow)imgbtn.NamingContainer;
string strHFFileDetails =((HiddenField )row.FindControl("HFFileID")) .Value.ToString();
string[] strFileDetails = strHFFileDetails.Split('?');
string FilePath = strFileDetails[1].ToString();
string filename = gvFiles.Rows[row.RowIndex].Cells[0].Text.ToString();
string path = @FilePath;
System.IO.FileInfo file = new System.IO.FileInfo(path);
if (file.Exists)
{
Response.Clear();
Response.AppendHeader("Content-Disposition:", "attachment; filename=" + file.Name);
Response.AppendHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.TransmitFile(file.FullName);
Response.End();
}
}
@Tapas Mahata试试这个 在web.config中定义您的web URL
<appSettings>
<add key="FileURL" value="http:\\www.WebSiteName.com\"/>
<appSettings>
@Tapas Mahata也试试这个 aspx页面:
<asp:GridView ID="gv" OnRowDataBound="gv_RowDataBound" AutoGenerateColumns="False" runat="server">
<Columns>
<asp:HyperLinkField Target="_blank" DataNavigateUrlFields="URL" DataTextField="URL" HeaderText="Document Path" />
</Columns>
</asp:GridView>
如何在代码中添加一些日志以准备生产?您的web应用程序是否有权限写入生产服务器上的特定位置?@chridam是的,web应用程序已授予完全权限。@watraplion:filepath包含要下载的文件的完整路径,例如。“Attachment\DownloadableFiles\ProjectOverview.pptx”您在->Server.MapPath(“~/”+filePath)中得到的值是多少?检查完整URL是否正确。如果正确,请在浏览器中键入完整URL,并检查是否正在删除您的pptx文件??抱歉,在生产过程中也会出现相同的错误,但在开发和QA中工作正常:(
<asp:GridView ID="gv" OnRowDataBound="gv_RowDataBound" AutoGenerateColumns="False" runat="server">
<Columns>
<asp:HyperLinkField Target="_blank" DataNavigateUrlFields="URL" DataTextField="URL" HeaderText="Document Path" />
</Columns>
</asp:GridView>
private string docPath = "";
protected void Page_Load(object sender, EventArgs e)
{
docPath = ResolveClientUrl("~/Uploads/");
}
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
HyperLink FileHyperlink = null;
if (e.Row.RowType == DataControlRowType.DataRow)
{
FileHyperlink = (HyperLink)e.Row.Cells[0].Controls[0];
string fileName = FileHyperlink.Text.Replace("'", "''");
FileHyperlink.NavigateUrl = docPath + fileName;
}
}