C#でダウンロードする前にバイナリファイルの名前を取得する
-
27-10-2019 - |
質問
最初は状況について説明させてください。 C#での私のアプリケーションは、PHPサーバーに最新のアップデートを求めます。 URLと次のような単純な投稿属性を使用します:127.0.0.1/update.php?ver=0.2、サーバーは0.2以下ではない場合は404で応答し、新しいバージョンがあるときに200 OKではバイナリファイルの送信を開始する場合は200 OKで応答しますMime-Type:Octet-Stream。
このファイルを取得することに問題はありませんが、ファイル名を取得することに問題があります。
このコードで:
WebClient webClient = new WebClient();
webClient.DownloadFile("http://127.0.0.1/update.php?ver=0.2", filename);
私は私を置かなければなりません ファイル名 しかし、サーバー上のファイルと同じ名前を付けたい場合はどうなりますか?ダウンロードする前にどうすれば入手できますか?
解決
使用する場合 OpenRead()
次に、の値があるかどうかを確認できます webClient.ResponseHeaders["content-disposition"]
filename = "blah.blah"部分を解析します。
ただし、Web上の大部分のストリームにはファイル名情報がありません。送信された場合、ファイル拡張機能がマシンのマッピングと一致するようにコンテンツタイプに基づいてファイル拡張子を書き直したい場合があります。に保存されています。
他のヒント
これは直接不可能です WebClient
このようなシナリオにはあまりうまく機能しない高レベルの機能を提供します。
あなたが取ることができるいくつかのアプローチがありますが、それらはすべて、1つのタイプまたは他のタイプの変更が必要です。これがカップルです:
- 機能を2つの部分に分割できます。
DownloadString
)それは更新があるかどうか、そしてその名前が何であるかを教えてくれます。 それから 電話DownloadFile
更新自体を取得するには、名前を知っています。 - の利便性をあきらめます
DownloadFile
HTTPリクエストを低レベルで処理します。これを行い、HTTP応答ヘッダーを読み取り、ヘッダーを追加できるようにします(何でもできます。X-Save-Filename:
)それはあなたにファイル名がどうあるべきかを教えてくれます。
所属していません StackOverflow