2012-01-09 54 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