2011-10-20 42 views
0

首先让我描述一下情况。 我在C#中的应用程序询问PHP服务器是否有最新的更新。它使用它的URL和一个简单的POST属性,例如:127.0.0.1/update.php?ver=0.2,服务器响应404,如果没有永远不是0.2的版本,并且在有更新版本的情况下200 OK,并开始发送二进制文件在MIME类型:八位字节流。在C#下载之前获取二进制文件的名称

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

有了这个代码:

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

我已经把我的但如果我希望它具有相同的名称作为服务器上的文件?下载之前如何获取它?

+2

可能的重复http://stackoverflow.com/questions/4096929/get-filename-while-downloading-it –

+0

是啊!你是对的,这是同样的问题,谢谢你的提示,并抱歉重复.. – gawi

回答

1

如果使用OpenRead()那么你可以看看是否有用于webClient.ResponseHeaders["content-disposition"]值,并解析出文件名=“blah.blah”的一部分。

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

+0

感谢您的帮助,因为Martijn B发布了相同的解决方案http://stackoverflow.com/questions/4096929/get-filename-while-downloading-it – gawi

1

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

你可以采取几种方法,但他们都需要改变一种或其他类型。这里有几个:

  1. 您可以分割功能分为两个部分:打一个电话,(与DownloadString EG),告诉你,如果有更新和它的名称是,然后呼叫DownloadFile得到更新自己,知道名字。
  2. 放弃DownloadFile的便利,并处理较低级别的HTTP请求;这样做是为了让你能够读取HTTP响应头文件,并添加一个头文件(可以是任何东西,甚至可以创建一个头文件,例如X-Save-Filename:),告诉你文件名应该是什么。
+0

非常有用和有益的 - 谢谢! – gawi

+0

当许多Web客户端(包括大多数浏览器)已经理解内容处置时,请勿使用X-Save-Filename。 –