サーバにより指定されたファイル名でファイルをダウンロードして保存するには?[C#、VB].NET TIPS

» 2007年07月12日 05時00分 公開
[遠藤孝信デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

 Webからファイルをダウンロードする際、Webサイトによってはダウンロードするファイルの名前がサーバ側で設定されている場合がある。これは通常、サーバ側でHTTPヘッダに次のような文字列(Content-Dispositionヘッダ)を追加することにより行われる。

Content-Disposition: attachment; filename="<ファイル名>"

Content-Dispositionヘッダの記述例
Content-Dispositionヘッダの仕様についてはRFC 2183(英文)を参照。

 このような設定が行われているファイルを例えばIEでダウンロードする場合、ローカルに保存されるファイルには<ファイル名>部分で指定された名前が自動的に使用されるようになっている。

 しかし、プログラムで例えばWebClientクラス(System.Net名前空間)のDownloadFileメソッドを使用してダウンロードする場合(「TIPS:WebClientクラスでWebページを取得するには?」を参照)には、メソッドのパラメータとして、ダウンロードするファイルのURLとともに、そのファイルの保存時の名前を指定しなければならず、サーバ側で指定されたファイル名は利用できない。

サーバにより指定されたファイル名の取得

 ファイルをダウンロードするときにサーバ側で指定されたファイル名で保存するには、HttpWebRequestクラス/HttpWebResponseクラス(System.Net名前空間)を使用し(「TIPS:WebRequest/WebResponseクラスでWebページを取得するには?」を参照)、ダウンロードする前に上記のようなContent-Dispositionヘッダの内容を読み取り、ファイル名部分を独自に取得すればよい。

 具体的には、ダウンロード時のレスポンス(HttpWebResponseオブジェクト)からHeadersプロパティによりContent-Dispositionヘッダの内容を取得し、そこから「filename=」に続く文字列を切り出してファイル名とする。このような処理を行うサンプル・プログラムを次に示す。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。