我使用以下代码打开文件。当我提示打开/保存文件时,它显示该文件来自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();
编辑:((LinkButton)sender).Text)是没有路径的文件名。例如,文件的实际位置是Y:\ SPR_Upload,Y是映射到C $(\ m6300-7)的网络驱动器。当我单击该文件时,系统提示您是否要从localhost打开或保存XXX(24.1KB)?我想用m6300-7替换localhost。我该怎么做?
答案 0 :(得分:1)
问题似乎是您正在使用
((LinkButton)sender).Text
获取文件名。如果调用它的LinkButton将localhost
硬编码到其Text值中,则必须在那里进行更正。
如果您已将LinkButton的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
标题只设置浏览器显示用户的文件名。