2013-03-15 72 views
1

我有以下代碼response.transmitfile更改文件名

Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles submit1.Click 

    Dim filename As String = "C:\pdfs\" + TextBox1.Text 
    Response.TransmitFile(filename) 

End Sub 

Textbox1.text是包括擴展PDF的名稱。這工作正常,除了pdf的文件名變成了我所稱的網頁的名稱。 c:\ pdfs中pdf的名稱仍然保持原樣。

我可以阻止它改變名稱。

+0

你真的應該在使用它之前驗證文件名;至少在代碼中附加'.pdf'。有人可以在文本框中輸入諸如.. \ Windows \ somesystemfile之類的內容,並且如果文件權限設置不正確,則有人可能會獲取Windows密碼文件或其他不應允許泄露的信息。 (目錄遍歷漏洞。) – 2013-03-15 23:22:26

回答

3

更改Response.TransmitFile到

Dim fileInfo As FileInfo = new FileInfo("C:\pdfs\" + TextBox1.Text) 

Response.ContentType = "application/octet-stream"; 
Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", TextBox1.Text)); 
Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
Response.WriteFile(fileInfo.FullName); 
Response.End(); 
0

如果你願意,你可以繼續使用Transferfile但這種方式。

FileInfo file = new FileInfo(filePath); 

//線路1:添加「文件名」及附件,這將迫使打開/着性/保存對話框顯示,到頭部而得名

response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 

//添加文件大小爲響應頭

response.AddHeader("Content-Length", file.Length.ToString()); 

//設置的ContentType

response.ContentType = file.Extension.ToLower(); 

//將文件寫入響應(TransmitFile用於ASP.NET 2.0。在ASP.NET 1.1中,你必須使用WriteFile)

​​