クラス FileDownload
java.lang.Object
jakarta.servlet.GenericServlet
jakarta.servlet.http.HttpServlet
org.opengion.hayabusa.servlet.FileDownload
- すべての実装されたインタフェース:
Servlet
,ServletConfig
,Serializable
サーバー管理ファイルをダウンロードする場合に使用する、サーブレットです。
引数(URL)に指定のファイルをサーバーからクライアントにダウンロードさせます。
file には、サーバーファイルの物理アドレスを指定します。相対パスを使用する場合は、
コンテキストルート(通常、Tomcatでは、G:\webapps\dbdef2\ など)からのパスと判断します。
name には、クライアントに送信するファイル名を指定します。ファイル名を指定しない場合は、
サーバーの物理ファイルのファイル名が代わりに使用されます。
日本語ファイル名は、すべて UTF-8化して処理します。指定するファイルに日本語が含まれる
場合は、URLエンコードを行ってください。変換前エンコードはリクエスト変数requestEncodingで指定可能で、標準はISO-8859-1です。
基本的にはContent-disposition属性として"attachment"が指定されます。
但し、引数に inline=true を指定することで、Content-disposition属性に"inline"が指定されます。
また、システムリソースのUSE_FILEDOWNLOAD_CHECKKEYをtrueに指定することで、簡易的なチェックを
行うことができます。
具体的には、これを有効にすると、file属性の値から計算されるハッシュコードチェックサムと、"key"という
パラメーターに指定された値が一致した場合のみダウンロードが許可され、keyが指定されていない、
または値が異なる場合はダウンロードエラーとなります。
一般的なサーブレットと同様に、デプロイメント・ディスクリプタ WEB-INF/web.xml に、
servlet 要素と そのマッピング(servlet-mapping)を定義する必要があります。
<servlet>
<servlet-name>fileDownload</servlet-name>
<servlet-class>org.opengion.hayabusa.servlet.FileDownload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileDownload</servlet-name>
<url-pattern>/jsp/fileDownload</url-pattern>
</servlet-mapping>
一般には、http://:ポート/システムID/jsp/fileDownload?file=サーバー物理ファイル&name=ファイル名
形式のURL でアクセスします。
5.9.25.0 (2017/10/06)
クラウド上のPaaSでオブジェクトストレージを利用する際は以下のシステムリソースを設定してください。
CLOUD_TARGET,CLOUD_BUCKET
plugin/cloud内のクラスを利用してファイルアップロード(FileUploadタグ)、ダウンロード(FileDownloadサーブレット)をAPI経由で行います。
プラグインが利用するjarファイルの配置は必要です。
サーブレットに対して引数でstorage,bucketを与える事も可能です。
5.8.1.0 (2014/11/07)
forwardでアクセスする場合はファイル名の文字コード変換が不要なため、useStringConvert=falseの
引数を与えてください。(falseとしない場合は日本語ファイル名等でエラーが発生します)
5.10.9.0 (2019/03/01) クラウドとバケット名を指定するリクエストパラメータを追加。
8.0.1.0 (2021/10/29) storageType → storage 、bucketName → bucket に変更
storage (初期値:システムリソースのCLOUD_TARGET)
bucket (初期値:システムリソースのCLOUD_BUCKET)
useLocal (初期値:false)
初期値は、システムリソース上のパラメータで初期値を指定できます。
強制的にローカルファイルにアクセスする場合は、"LOCAL" を指定するか、useLocal="true"を指定してください。
7.2.7.0 (2020/08/07) 相対パスの場合の基準フォルダ
互換性確保のため、useBase リクエスト変数を true で飛ばすと、処理を実行します。
8.0.0.1 (2021/10/08)
useStringConvert (エンコード変換対応のON/OFF指定)を廃止。
漢字ファイルのエンコードを指定すると、文字化けするので、何も行わない。
RequestEncoding パラメータも、使用しません。
- 関連項目:
- 変更履歴:
- 3.8.1.1 (2005/11/21) 新規追加, 5.9.25.0 (2017/10/06) クラウド対応, 5.9.29.1 (2018/02/07) Azure対応追加, 5.10.9.0 (2019/03/01) oota クラウドストレージ対応を追加。(Fileクラスを拡張)
- 機能分類
- その他機能
- 導入されたバージョン:
- JDK1.1,
-
フィールドの概要
クラスから継承されたフィールド jakarta.servlet.http.HttpServlet
LEGACY_DO_HEAD
-
コンストラクタの概要
コンストラクタ -
メソッドの概要
修飾子とタイプメソッド説明void
doGet
(HttpServletRequest request, HttpServletResponse response) GET メソッドが呼ばれたときに実行します。 処理は、doPost へ振りなおしています。void
doPost
(HttpServletRequest request, HttpServletResponse response) POST メソッドが呼ばれたときに実行します。 file 引数の サーバー物理ファイルを、クライアントにストリーム化して返します。 name 引数があれば、その名前のファイル名でクライアントがファイルセーブできるように します。name 引数がなければ、そのまま物理ファイル名が使用されます。 サーバー物理ファイル名が、相対パスの場合、コンテキストルートに対する相対パスになります。 (例:G:\webapps\dbdef2\ など)クラスから継承されたメソッド jakarta.servlet.http.HttpServlet
doDelete, doHead, doOptions, doPut, doTrace, getLastModified, init, service, service
クラスから継承されたメソッド jakarta.servlet.GenericServlet
destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
-
コンストラクタの詳細
-
FileDownload
public FileDownload()デフォルトコンストラクター- 変更履歴:
- 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
-
-
メソッドの詳細
-
doGet
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException GET メソッドが呼ばれたときに実行します。 処理は、doPost へ振りなおしています。- オーバーライド:
doGet
クラス内HttpServlet
- パラメータ:
request
- HttpServletRequestオブジェクトresponse
- HttpServletResponseオブジェクト- 例外:
ServletException
- サーブレット関係のエラーが発生した場合、throw されます。IOException
- 入出力エラーが発生したとき- 変更履歴:
- 3.8.1.2 (2005/12/19) 半角カナ-全角カナ変換機能の追加
-
doPost
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException POST メソッドが呼ばれたときに実行します。 file 引数の サーバー物理ファイルを、クライアントにストリーム化して返します。 name 引数があれば、その名前のファイル名でクライアントがファイルセーブできるように します。name 引数がなければ、そのまま物理ファイル名が使用されます。 サーバー物理ファイル名が、相対パスの場合、コンテキストルートに対する相対パスになります。 (例:G:\webapps\dbdef2\ など)- オーバーライド:
doPost
クラス内HttpServlet
- パラメータ:
request
- HttpServletRequestオブジェクトresponse
- HttpServletResponseオブジェクト- 例外:
ServletException
- サーブレット関係のエラーが発生した場合、throw されます。IOException
- 入出力エラーが発生したとき- 変更履歴:
- 5.3.2.0 (2011/02/01) 日本語ファイル名が正しく処理できないバグを修正, 5.3.4.0 (2011/04/01) IEでファイルが正しくダウンロードできないバグを修正, 5.3.5.0 (2011/05/01) ファイルダウンロードチェックキー対応, 5.3.6.0 (2011/06/01) ファイルダウンロードはattachmentに変更(ダウンロードダイアログを出す), 5.3.8.0 (2011/08/01) ファイル名指定でIEの場合、URLエンコードすると途中で切れるため(IE7のバグ)、Shift_JIS(WIndows-31J)で直接指定する。, 5.3.9.0 (2011/09/01) 引数にinline=trueを指定することで、インライン表示が出来るように対応, 5.7.1.2 (2013/12/20) 日本語ファイルのIE11対応(UA変更),msg ⇒ errMsg 変更, 5.8.1.0 (2014/11/07) forward時の文字コード変換不要対応, 5.9.25.0 (2017/10/06) クラウドストレージからダウンロード処理を追加対応, 5.9.27.0 (2017/12/01) Content-Lengthをhttpヘッダに追加しておく, 5.9.27.2 (2017/12/15) Edgeの日本語ファイル名対応, 6.8.4.2 (2017/12/25) エンコード変換対応のキー(fileDownloadサーブレットでエンコードをON/OFF指定に利用), 5.9.28.1 (2018/01/19) safariの日本語ファイル名対応(RFC6266方式を併記), 6.9.4.1 (2018/04/09) 日本語ファイル名で、旧方式を入れておくと、文字化けするので、はずします。, 5.10.12.4 (2019/06/21) エンコーディングを外部から指定可能にする, 7.2.7.0 (2020/08/07) 相対パスの場合の基準フォルダ(FILE_URL) 考慮, 8.0.0.1 (2021/10/08) USE_STR_CONV_KEY 廃止, 8.1.2.0 (2022/03/10) getMD5 メソッドを getHash メソッドに変更, 8.4.0.0 (2022/12/23) ファイル名が漢字の場合、RFC6266方式を併記すると、エラーになる(Tomcat10.1~)
-