2011-10-20 102 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。 –

相關問題