我有一個GridView,它具有以下模板字段,用於保存文件名,當用戶單擊文件名時,我調用window.open()打開文件。我的問題是我只能將相對路徑傳遞給window.open()。如果我使用完整路徑,則出現錯誤。有什麼方法可以使用完整路徑打開文件?謝謝。如何通過完整路徑打開文件?
<asp:TemplateField HeaderText="FileName">
<ItemTemplate>
<asp:LinkButton ID="lnkFile" runat="server"
Text='<%# Eval("FileName")%>' OnClick="lnkFile_Click">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
補充:文件的實際位置在web.config中定義。
我寫了下面的lnkFile_Click()。舊部分將爲該文件打開一個新窗口,但我無法傳遞該文件的完整路徑。新部分將讓您可以選擇打開或保存文件。我的問題是,這會導致安全問題嗎?
protected void lnkFile_Click(object sender, System.EventArgs e)
{
string fileName = ConfigurationSettings.AppSettings["SPRAttachmentLocation"] + "\\SPR" + sprID + "\\" + ((LinkButton)sender).Text;
if (!File.Exists(fileName))
{
Exception ex = new Exception("Could not find the file, please contact your administrator.");
Response.Write("<p align=\"center\"><br /><br /><br /><br />There has been an Error: <strong>" + ex.Message + "</strong></p>\n");
return;
}
新:
byte[] bts = System.IO.File.ReadAllBytes(fileName);
Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Content-Type", "");
Response.AddHeader("Content-Length", bts.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(bts);
Response.Flush();
Response.End();
老:
string newWindowUrl = "/SPR_Upload/SPR" + sprID + "/" + ((LinkButton)sender).Text;
string javaScript =
"<script type='text/javascript'>\n" +
"<!--\n" +
"window.open('" + newWindowUrl + "');\n" +
"// -->\n" +
"</script>\n";
Page.ClientScript.RegisterStartupScript(GetType(), "", javaScript);
}
你得到了什麼錯誤? – keyboardP 2012-01-05 15:35:38
此文件是否位於網站/應用程序文件夾下? window.open()只能通過URL(相對或絕對)來尋址,其中絕對以「HTTP」,「HTTPS」等開頭。 – GalacticCowboy 2012-01-05 15:36:30
文件的實際位置在web.config中定義。它可以在遠程機器的網站/應用程序文件夾下。所以你的意思是我不能使用window.open()。有沒有其他功能可以使用? – GLP 2012-01-05 15:43:10