c# – 获取没有Content-Disposition的文件名

前端之家收集整理的这篇文章主要介绍了c# – 获取没有Content-Disposition的文件名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找这个问题的解决方案好几天,我找不到任何.

我想从带有webclient的web服务器下载文件.下载工作正常,但我无法获得真正的文件名,这对我来说非常重要.

我在许多主页上看过,文件名应该保存在Content-Disposition-Header中.不幸的是,这个网站的标题是空的.我试图得到它:

  1. string header_contentDisposition ="";
  2. using (WebClient client = new WebClient())
  3. {
  4. client.OpenRead(link);
  5.  
  6. header_contentDisposition = client.ResponseHeaders["Content-Disposition"];
  7. MessageBox.Show(header_contentDisposition);
  8. }

标题中没有保存信息.

如果我尝试使用我的浏览器(IE,Opera,Chrome)下载文件,文件名将显示在filedialog中,因此必须将其保存在某处.

你能想象我能在哪里找到它吗?

编辑:我无法从URL中提取它,因为链接是由PHP生成

  1. http://www.example.com/download.PHP?id=10

解决方法

你可以试试这个:
  1. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  2. try
  3. {
  4.  
  5. HttpWebResponse res = (HttpWebResponse)request.GetResponse();
  6. using (Stream rstream = res.GetResponseStream())
  7. {
  8. string fileName = res.Headers["Content-Disposition"] != null ?
  9. res.Headers["Content-Disposition"].Replace("attachment; filename=","").Replace("\"","") :
  10. res.Headers["Location"] != null ? Path.GetFileName(res.Headers["Location"]) :
  11. Path.GetFileName(url).Contains('?') || Path.GetFileName(url).Contains('=') ?
  12. Path.GetFileName(res.ResponseUri.ToString()) : defaultFileName;
  13. }
  14. res.Close();
  15. }
  16. catch { }

http://upload.p-kratzer.com/index.php?dir=&file=asdfasdfwervdcvvedb上进行了测试,确实返回了wetter.JPG.

猜你在找的C#相关文章