いや、本当は対応できる方法があるのかもしれませんが・・・。
.NETで書くコードのうち、サーバからファイルをダウンロードするには
の2つのうち、どちらかを使うことが多いと思います。
My.Computer.Network.DownloadFileはインスタンスを作る必要もなく、ダウンロードの進捗ウィンドウを出すことが出来ます。
「あと○分」みたいな画面を自作するよりずっと簡単なので、つい使ってしまうんですよね。
私も業務で開発したプログラムの中に、このメソッドを仕込んでおりました。
一般的なプログラムにもある「今すぐ更新プログラムをダウンロードしてインストール」みたいな機能ですね。
さて、My.Computer~でダウンロードしているファイルの、ダウンロード元サーバを変更するという案件が発生しました。
とりあえずwebサーバ側のリダイレクトで対応しちゃえーということで.htaccessを書いてアップロード。
ブラウザからリダイレクトが効いているのを確認して、プログラムでもダウンロード・・・を試したのですが、落ちてきたのは1KB程度のファイル。戻り値は「正常終了」(というか正常じゃない場合Exceptionが発生する)。
あれーと思って見てみると、この1KBのファイルっていうのがhtml。
中を見ると「Moved Permanently」というタイトルがあり、「こっちのurlに変わったよ!」という内容が記載されていました。
ちなみに.htaccessの中身は↓こんな感じ。
.NETで書くコードのうち、サーバからファイルをダウンロードするには
- My.Computer.Network.DownloadFile
- System.Net.WebClient(インスタンスからDownloadFileあるいはDownloadFileAsyncメソッド)
の2つのうち、どちらかを使うことが多いと思います。
My.Computer.Network.DownloadFileはインスタンスを作る必要もなく、ダウンロードの進捗ウィンドウを出すことが出来ます。
「あと○分」みたいな画面を自作するよりずっと簡単なので、つい使ってしまうんですよね。
私も業務で開発したプログラムの中に、このメソッドを仕込んでおりました。
一般的なプログラムにもある「今すぐ更新プログラムをダウンロードしてインストール」みたいな機能ですね。
さて、My.Computer~でダウンロードしているファイルの、ダウンロード元サーバを変更するという案件が発生しました。
とりあえずwebサーバ側のリダイレクトで対応しちゃえーということで.htaccessを書いてアップロード。
ブラウザからリダイレクトが効いているのを確認して、プログラムでもダウンロード・・・を試したのですが、落ちてきたのは1KB程度のファイル。戻り値は「正常終了」(というか正常じゃない場合Exceptionが発生する)。
あれーと思って見てみると、この1KBのファイルっていうのがhtml。
中を見ると「Moved Permanently」というタイトルがあり、「こっちのurlに変わったよ!」という内容が記載されていました。
ちなみに.htaccessの中身は↓こんな感じ。
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteRule ^xxx.dat http://~/xxx.dat [R=301,L]
ReweiteRuleがダメなのかなあ・・と思って
Redirect xxx.dat http://~/xxx.dat
と書いても現象は変わらず。
My.Computer.Network.DownloadFileって、.htaccessに対応してない!?
という疑念が沸き、試しに複数のレンタルサーバで試してみました。
結果としてはどこも同じ。
ただしSystem.Net.WebClientでは正常にリダイレクト先のサーバからダウンロードすることができました。
というわけで、急遽My.Computer.Network.DownloadFileメソッドはすべてSystem.Net.WebClientに書き換えてパッチリリースということになったのですが、これ、対処法ってあるんですかね。
コメント