2011-09-06 473 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,因此可能不包含扩展名,甚至不包含有意义的名称。