Get filename without 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 的文件名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:获取没有 Content-Disposition 的文件名


- 在 LINQ to SQL 中使用 contains() 2022-01-01
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- 使用 rss + c# 2022-01-01