2013-05-22 59 views
0

我已經使用以下代碼從服務器上下載文件,該文件在每個瀏覽器中都可以在開發和QA服務器上正常工作,但是當生產出現錯誤時。該錯誤是System.IO.DirectoryNotFoundException路徑的一部分是不正確的使用生產服務器上的文件下載問題

代碼:

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(); 
} 

這個問題似乎是奇數和痛苦的調試,因爲它只發生在生產服務器。 請幫我一把。

+1

如何添加一些日誌到您的代碼,使其生產就緒? – weismat

+0

您的Web應用程序是否有權寫入生產服務器上的特定位置? – chridam

+0

@chridam是的,網絡應用程序有完整的權限。 –

回答

0

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(); 
    } 

} 
+0

Server.MapPath正在選擇正確的路徑。 –

0

@Tapas Mahata試試這個,

定義Web URL在web.config中,

<appSettings> 
    <add key="FileURL" value="http:\\www.WebSiteName.com\"/> 
<appSettings> 

在aspx.cs,

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(); 

     string fileURL = ConfigurationManager.AppSettings["FileURL"].ToString(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filePath + "\""); 
     Response.TransmitFile(fileURL+filePath); 
     Response.End(); 
} 
+0

對不起,生產中發生同樣的錯誤,但在開發和QA中工作正常。 :( –

+0

已嘗試上述超鏈接代碼?它在我的最後工作。 – watraplion

0

@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> 

aspx.cs頁:

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; 
    } 
} 
相關問題