スキップしてメイン コンテンツに移動

My.Computer.Network.DownloadFileは.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に書き換えてパッチリリースということになったのですが、これ、対処法ってあるんですかね。

コメント

このブログの人気の投稿

【VS2019】ある日急にデザイナーがエラーを吐いた時の対処メモ

仕事でVisual Studio 2019 Communityを使う時があるのですが、ある時、前日まで普通に使えていたプロジェクトのうち、フォームのデザイナがエラーを起こしてしまいました。 --- データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。 このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。 --- こんなメッセージが。 結論から言うと直ったのですが、この現象への対処法を調べましたのでまとめます。

今更ながらマキシマムザホルモン「絶望ビリー」出演者が誰なのか調べてみた

ふと思い立ってマキシマムザホルモンの「絶望ビリー」のPVに登場する人たちを調べてみました。 ・・・といっても下記の二組(というか一組と一人)は不明なままです。 【不明な人たち】 ・アコギの二人組 ・フェンスを叩いて叫んでいるマッチョな人 ・アナウンサー ・クイズ番組の回答者(一人は亮君だけど) 【判明した出演者】 ・ビジュアル系のバンド・・・ PARFAIT (複数のサイトで確認。たぶん合ってる) ・アイドル系の女の子・・・ 辰巳 奈都子 ・ヒップホップ系の二人組・・・アンディとジョージ☆(というらしい。真偽不明) ・ギターを弾いて歌っている女性・・・ KIKU ( THE SWEET TRIP というバンドのvo/g) というわけで、全員はわかりませんでした。 個人的にはKIKUという人のギターの弾き方が気になっていたので、名前がわかって良かったですw

Skype複数端末で同期されない時はweb版にアクセスするといい(かも)

タイトルですべてを語ってしまいましたが、どうも経験上そんな気がします。 2020年5月現在、新型コロナウィルスの影響を受けて在宅業務をしているのですが、同僚との主なやり取りはSkypeを介して行っています。 しかも使っているのは3端末。 自前のMac ... テキストでのやり取りは主にここで。 会社貸与のWindows ... vpn+rdpで使っていて、そのrdp先でのSkype。ファイルのやり取りがあるので。 自前のiPhone ... 離席中やビデオ通話に使う。 さてこのSkype、すべて同じアカウントで使っているのですが、どうもたまにログが同期しないのです。 Macでやり取りしたメッセージがWindowsやiPhone側に表示されなかったりしています(あくまで一例で、機種は関係ないっぽい)。 何かのタイミングで急に同期したりするのですが、これが頻繁に起きるとけっこう不便なんですよね。 で、あれこれ試した結果、web版のSkypeにアクセスすると、急にログが同期することに気が付きました。 web版Skypeはこちら。 https://web.skype.com/ どういう仕掛けはよくわかりませんが、複数端末で同一アカウント環境下でログが同期されない場合、一度アクセスしてみてはどうでしょうか。 ・・・というか、だったら何処かひとつの端末はweb版にしておけばいいのかw