在c#中下载前获取二进制文件的名称
本文关键字:二进制文件 获取 下载 | 更新日期: 2023-09-27 18:11:43
首先让我来描述一下情况。我的c#应用程序向PHP服务器请求最新的更新。它使用它的URL和一个简单的POST属性,如:127.0.0.1/update.php?ver=0.2,如果没有超过0.2的版本,服务器响应404,当有更新的版本并开始以mime-type: octet-stream发送二进制文件时,服务器响应200 OK。
我在获取这个文件时没有任何问题,但是我在获取它的文件名时遇到了问题。
使用下面的代码:
WebClient webClient = new WebClient();
webClient.DownloadFile("http://127.0.0.1/update.php?ver=0.2", filename);
我必须把我的文件名,但如果我想它有相同的名称在服务器上的文件?在下载之前,我怎样才能得到它?
如果使用OpenRead()
,则可以查看webClient.ResponseHeaders["content-disposition"]
是否有值,并解析出filename="blah "。"部分。
然而,网络上的绝大多数流都没有文件名信息,当它被发送时,你可能想要根据内容类型重写文件扩展名,以便文件扩展名与保存到的机器上的映射匹配。
这是不可能的,因为WebClient
提供的高级功能不太适合这种情况。
您可以采用几种方法,但它们都需要更改一种类型或另一种类型。这里有几个:
- 你可以把功能分成两个部分:做一个调用(例如用
DownloadString
),告诉你是否有一个更新和它的名字是什么,然后调用DownloadFile
来获取更新本身,知道这个名字。 - 放弃
DownloadFile
的便利性,在较低层次处理HTTP请求;这样你就可以读取HTTP响应头,并添加一个头(可以是任何东西,你甚至可以像X-Save-Filename:
一样创建一个),告诉你文件名应该是什么。