2012-01-09 56 views
0

我使用下面的代码来打开一个文件。当我提示打开/保存文件时,它显示文件来自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的)发送器)。文本)是不带路径的文件名。例如,文件的实际位置是Y:\ SPR_Upload,Y是映射到C $(\ m6300-7)的网络驱动器。当我点击文件时,系统提示我是否要从本地打开或保存XXX(24.1KB)?我想用m6300-7替换localhost。我怎么做?

回答

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头分配使用结果值。

更新

当浏览器说,“你想从本地主机下载其中xxxx.xx?”,它被用来下载文件的URL中获取的服务器名称(本地主机在这种情况下) 。如果你运行同一个应用程序,比如说“www.mysite.com”,浏览器会说“你想从www.mysite.com下载xxxx.xx?”出于安全原因等,您应该无法覆盖该提示中使用的服务器的名称。

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

+0

对不起,我的不清楚。请看我的新编辑。 – GLP 2012-01-09 21:17:57

+0

@GaolaiPeng回答更新 – 2012-01-11 16:15:10

+0

谢谢。我明白了。猜猜你不允许改变它。 – GLP 2012-01-11 20:51:25