这是一个代码,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 :(得分:2)
这样做:
string fileName = Path.GetFileName(result.Headers["Location"]);
这样,您就可以在位置标题的末尾找到文件名。
答案 1 :(得分:2)
正确的方法是查看Content-Disposition字段是否提供了文件名,如果没有,则尝试从“位置”字段推断文件名。
请注意,位置字段只是下载请求的URL,因此可能不包含扩展名甚至是有意义的名称。
答案 2 :(得分:1)
根据您的请求提供标题,您应该可以:
string file = result.Headers["Location"];
答案 3 :(得分:1)
如果你有文件的位置,你可以只提取你想要的标题(在这种情况下,我认为它被编入4
或"Location"
索引),然后取最后一部分网址。
答案 4 :(得分:0)
由于文件位于服务器上,您将无法检索实际文件名。只有Web应用程序告诉您的内容。
此文件名位于“位置”。
但是,由于应用程序告诉您它是text / html,因此可能会在将结果发送给您之前格式化结果。可执行文件的正确mime类型是application / octet-stream。
另一方面。您似乎正在下载文件,在这种情况下无需提供路径。您下载的文件的路径将是您将下载的流的内容放入的任何路径。 因此,您保存文件并将其放在您有权访问的任何地方。
创建文件时,您必须提供路径,否则它将与调用它的可执行文件放在同一目录中。
我希望这会有所帮助
答案 5 :(得分:0)
如果其他所有方法均失败,则始终可以解析WebResponse.ResponseUri.ToString()。使用string.LastIndexOf(“ /”)查找文件名的开头,并使用String.IndexOf查看是否存在“?”。
public static void ExtractFileNameFromUri(string URI, ref string parsedFileName, string fileNameStartDelimiter = "/", string fileNameEndDelimiter = "?")
{
const int NOTFOUND = -1;
try
{
int startParse = URI.LastIndexOf(fileNameStartDelimiter) + fileNameStartDelimiter.Length;
if (startParse == NOTFOUND)
return;
int endParse = URI.IndexOf(fileNameEndDelimiter);
if (endParse == NOTFOUND)
endParse = URI.Length;
parsedFileName = URI.Substring(startParse, (endParse - startParse));
}
catch (Exception e)
{
Console.WriteLine(e);
return;
}
}
答案 6 :(得分:0)
从Content-Disposition字段中检索文件名的简单有效的方法:
using System.Net.Mime;
HttpWebResponse resp = {YOUR RESPONSE}
string dispHeader = resp.GetResponseHeader("content-disposition");
ContentDisposition disp = new ContentDisposition(dispHeader);
string filename = disp.FileName;