获取没有 Content-Disposition 的文件名

Get filename without Content-Disposition(获取没有 Content-Disposition 的文件名)
本文介绍了获取没有 Content-Disposition 的文件名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我几天来一直在寻找这个问题的解决方案,但我找不到任何解决方案.

I am looking for a solution for this problem for days and I can't find any.

我想通过网络客户端从网络服务器下载文件.下载工作正常,但我无法获得真实的文件名,这对我来说非常重要.

I want to download a file from a webserver with a webclient. The download works fine, but I can't get the real filename, which is very important for me.

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

I read on many homepages, that the filename should be saved in the Content-Disposition-Header. Unfortunately this header of the site is empty. I tried to get it with:

string header_contentDisposition ="";
using (WebClient client = new WebClient())
            {
                client.OpenRead(link);

                header_contentDisposition = client.ResponseHeaders["Content-Disposition"];
                MessageBox.Show(header_contentDisposition);
            }

此标头内没有保存任何信息.

There is no information saved inside this header.

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

If I try to download the file with my Browser (IE, Opera, Chrome) the filename gets shown in the filedialog, so it has to be saved somewhere.

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

Can you imagine where I can find it?

我无法从 URL 中提取它,因为链接是由 php 生成的,例如

I can't extract it from the URL, because the link is generated by php like

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

推荐答案

你可以试试这个:

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        try
        {

            HttpWebResponse res = (HttpWebResponse)request.GetResponse();
            using (Stream rstream = res.GetResponseStream())
            {
                string fileName = res.Headers["Content-Disposition"] != null ?
                    res.Headers["Content-Disposition"].Replace("attachment; filename=", "").Replace(""", "") :
                    res.Headers["Location"] != null ? Path.GetFileName(res.Headers["Location"]) : 
                    Path.GetFileName(url).Contains('?') || Path.GetFileName(url).Contains('=') ?
                    Path.GetFileName(res.ResponseUri.ToString()) : defaultFileName;
            }
            res.Close();
        }
        catch { }

在 http://upload.p-kratzer.com/index.php?dir=&file=asdfasdfwervdcvvedb 它确实返回了 wetter.JPG.

Tested this on http://upload.p-kratzer.com/index.php?dir=&file=asdfasdfwervdcvvedb and it does return wetter.JPG.

这篇关于获取没有 Content-Disposition 的文件名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Force JsonConvert.SerializeXmlNode to serialize node value as an Integer or a Boolean(强制 JsonConvert.SerializeXmlNode 将节点值序列化为整数或布尔值)
Using JSON to Serialize/Deserialize TimeSpan(使用 JSON 序列化/反序列化 TimeSpan)
Could not determine JSON object type for type quot;Classquot;(无法确定类型“Class的 JSON 对象类型.)
How to deserialize a JSONP response (preferably with JsonTextReader and not a string)?(如何反序列化 JSONP 响应(最好使用 JsonTextReader 而不是字符串)?)
how to de-serialize JSON data in which Timestamp it-self contains fields?(如何反序列化时间戳本身包含字段的JSON数据?)
JSON.Net custom contract serialization and Collections(JSON.Net 自定义合约序列化和集合)