Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net response.transmitfile更改文件名_Asp.net_Vb.net - Fatal编程技术网

Asp.net response.transmitfile更改文件名

Asp.net response.transmitfile更改文件名,asp.net,vb.net,Asp.net,Vb.net,我有以下代码 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的文件名被更改为我称之为的

我有以下代码

    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名称保持原样


我可以停止更改名称吗。

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

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

如果需要,您可以继续使用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)


如果需要,您可以继续使用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)


您确实应该在使用文件名之前验证它;至少在代码中附加
.pdf
。有人可以在文本框中输入..\Windows\somesystemfile之类的内容,如果文件权限设置不正确,则有人可以获取Windows密码文件或其他不允许泄露的信息。(一个目录遍历漏洞。)您确实应该在使用文件名之前验证它;至少在代码中附加
.pdf
。有人可以在文本框中输入..\Windows\somesystemfile之类的内容,如果文件权限设置不正确,则有人可以获取Windows密码文件或其他不允许泄露的信息。(一个目录遍历漏洞。)谢谢!你让我走上了正确的道路。但是,
response.ContentType=file.Extension.ToLower()感觉不对。您应该将扩展映射到真实的内容类型(例如:.pdf=application/pdf、.png=image/png等)。是的,谢谢。谢谢!你让我走上了正确的道路。但是,
response.ContentType=file.Extension.ToLower()感觉不对。您应该将扩展映射到真实的内容类型(例如:.pdf=application/pdf、.png=image/png等)。是的,谢谢。