【问题标题】:Getting the name of the binary file before download in C#在C#中下载之前获取二进制文件的名称
【发布时间】:2011-10-20 11:57:52
【问题描述】:

首先让我描述一下情况。 我在 C# 中的应用程序向 PHP 服务器请求最新更新。它使用它的 URL 和一个简单的 POST 属性,例如:127.0.0.1/update.php?ver=0.2,如果没有超过 0.2 的版本,服务器会响应 404,如果有更新的版本,服务器会响应 200 OK 并开始发送二进制文件在 mime 类型中:八位字节流。

我在获取此文件时没有任何问题,但我在获取其文件名时遇到了问题。

使用此代码:

WebClient webClient = new WebClient();
webClient.DownloadFile("http://127.0.0.1/update.php?ver=0.2", filename);

我必须输入我的文件名,但如果我希望它与服务器上的文件具有相同的名称怎么办?下载前如何获取?

【问题讨论】:

标签: c# .net download webclient


【解决方案1】:

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

但是,网络上的绝大多数流都没有文件名信息,当它被发送时,您可能需要根据内容类型重写文件扩展名,以便文件扩展名与保存到的机器。

【讨论】:

【解决方案2】:

这是不可能直接实现的,因为 WebClient 提供的高级功能不太适合此类场景。

您可以采用多种方法,但它们都需要一种或另一种类型的更改。以下是一对:

  1. 您可以将功能分为两部分:拨打一个电话(例如使用DownloadString),告诉您是否有更新及其名称,然后拨打DownloadFile 获取更新本身,知道名称。
  2. 放弃DownloadFile的便利性,对HTTP请求进行下层处理;这样做是为了让您能够读取 HTTP 响应标头,并添加一个标头(可以是任何东西,您甚至可以像 X-Save-Filename: 一样组成一个标头)告诉您文件名应该是什么。

【讨论】:

  • 当许多 Web 客户端(包括大多数浏览器)已经理解 content-disposition 时,不要使用 X-Save-Filename。
猜你喜欢
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2013-05-28
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
相关资源
最近更新 更多