在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);

我必须把我的文件名,但如果我想它有相同的名称在服务器上的文件?在下载之前,我怎样才能得到它?

在c#中下载前获取二进制文件的名称

如果使用OpenRead(),则可以查看webClient.ResponseHeaders["content-disposition"]是否有值,并解析出filename="blah "。"部分。

然而,网络上的绝大多数流都没有文件名信息,当它被发送时,你可能想要根据内容类型重写文件扩展名,以便文件扩展名与保存到的机器上的映射匹配。

这是不可能的,因为WebClient提供的高级功能不太适合这种情况。

您可以采用几种方法,但它们都需要更改一种类型或另一种类型。这里有几个:

  1. 你可以把功能分成两个部分:做一个调用(例如用DownloadString),告诉你是否有一个更新和它的名字是什么,然后调用DownloadFile来获取更新本身,知道这个名字。
  2. 放弃DownloadFile的便利性,在较低层次处理HTTP请求;这样你就可以读取HTTP响应头,并添加一个头(可以是任何东西,你甚至可以像X-Save-Filename:一样创建一个),告诉你文件名应该是什么。