2011-09-06 83 views
0

這是一個代碼,C#。如何從Response.Header獲取文件名? C#

System.Net.HttpWebRequest _Response = 
    (HttpWebRequest)System.Net.WebRequest.Create(e.Uri.AbsoluteUri.ToString()); 
_Response.Method = "GET"; 
_Response.Timeout = 120000; 
_Response.Accept = 
    "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
_Response.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); 
_Response.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); 
_Response.Headers.Add("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.3"); 
_Response.AllowAutoRedirect = false; 

System.Net.HttpWebResponse result = (HttpWebResponse)_Response.GetResponse(); 

for (int i = 0; i < result.Headers.Count; i++) 
{ 
    MessageBox.Show(result.Headers.ToString()); 
} 

這是一個結果,

Cache-Control: private 
Content-Type: text/html 
Date: Tue, 06 Sep 2011 17:38:26 GMT 
ETag: 
Location: http://fs31.filehippo.com/6428/59e79d1f80a74ead98bb04517e26b730/Firefox Setup 7.0b3.exe 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
+0

您可能想要將_Response變量的名稱更改爲_Request。這是一個HttpWebRequest,而不是一個HttpWebResponse,並稱它爲_Response有點誤導。 – CodeThug

回答

1

鑑於你的頭從你的要求,你應該能夠做到:

string file = result.Headers["Location"]; 
1

如果你已經拿到了文件的位置你可以提取你想要的標題(在這種情況下,我想它是索引在4"Location"),然後拿走URL的最後部分。

2

做這樣的:

string fileName = Path.GetFileName(result.Headers["Location"]); 

這樣,你會在位置標頭的末尾有一個文件名。

+0

這與Reed Copsey的回答非常相似,但是這將只給出沒有其餘URL的文件名。 – Seffix

0

由於文件在服務器上,您將無法檢索到實際的文件名。只有Web應用程序告訴你。

此文件名在「位置」。

但是,由於應用程序告訴你它是text/html,它可能會在將結果發送給你之​​前格式化結果。可執行文件的正確MIME類型是application/octet-stream。

另一個說明。看起來您正在下載文件,在這種情況下,不需要提供路徑。您下載的文件的路徑將成爲您將下載的流的內容放入的任何路徑。 因此,您保存該文件並將其放在任何有權訪問的位置。

創建文件時,必須提供一個路徑,否則它將放在與調用它的可執行文件相同的目錄中。

我希望這有助於

1

正確的做法是,看是否有文件名是由Content-Disposition領域提供和,做不到這一點,試圖推斷位置字段的文件名。

請注意,位置字段只是下載請求的URL,因此可能不包含擴展名,甚至不包含有意義的名稱。