如何用其实际路径替换localhost?

时间:2012-01-09 20:36:37

标签: asp.net response

我使用以下代码打开文件。当我提示打开/保存文件时,它显示该文件来自localhost,但该文件可能位于网络驱动器中。有什么方法可以用它的实际位置替换localhost吗?

byte[] bts = System.IO.File.ReadAllBytes(fileName);
            Response.Clear();
            Response.ClearHeaders();
            Response.AddHeader("Content-Type", "Application/octect-stream");
            Response.AddHeader("Content-Length", bts.Length.ToString());
            Response.AddHeader("Content-Disposition", "attachment; filename=" + ((LinkButton)sender).Text);
            Response.BinaryWrite(bts);
            Response.Flush();
            Response.End();           

编辑:((LinkBut​​ton)sender).Text)是没有路径的文件名。例如,文件的实际位置是Y:\ SPR_Upload,Y是映射到C $(\ m6300-7)的网络驱动器。当我单击该文件时,系统提示您是否要从localhost打开或保存XXX(24.1KB)?我想用m6300-7替换localhost。我该怎么做?

1 个答案:

答案 0 :(得分:1)

问题似乎是您正在使用

((LinkButton)sender).Text

获取文件名。如果调用它的LinkBut​​ton将localhost硬编码到其Text值中,则必须在那里进行更正。

如果您已将LinkBut​​ton的Text属性硬编码为类似http://localhost:0000/....的内容,则需要更正此问题。除了接近于零的例外情况,您的应用中的所有链接都应该是相对的,例如/home/index/support/default.aspx

请注意,Content-Disposition标题只设置浏览器使用或呈现给用户的文件名 - 它可以设置为任何内容,而不必引用服务器上的真实文件。

因此,如果您只想要文件名(剥离所有路径信息等),您可以使用

var fileName = System.IO.Path.GetFileName(((LinkButton)Sender).Text);

然后在Content-Disposition标题分配中使用结果值。

<强>更新

当浏览器显示“你想从localhost下载xxxx.xx吗?”时,它会从用于下载文件的URL中获取服务器名称(本例中为localhost)。如果你在“www.mysite.com”上运行相同的应用程序,浏览器会说“你想从www.mysite.com下载xxxx.xx吗?”出于安全原因等,您不应该覆盖该提示中使用的服务器的名称。

Content-Disposition标题只设置浏览器显示用户的文件名。