ファイルをダウンロードする

ホーム > Basic examples > 例04

説明

ダウンロードとは、HTTP GETで対象を要求した際に、サーバから送られてくるレスポンスデータをブラウザや外部プラグインで開かず、直接ディスクにファイルとして保存することです。

一般に、ダウンロード対象がブラウザで解釈できない形式の場合、ブラウザは添付ファイルとしてダウンロードする。ただし、拡張子がJPGの画像ファイルのように解釈できる場合は、ダウンロードされずにブラウザのウィンドウに表示されます。

ターゲットを開かずに直接ダウンロードするには、ブラウザ自体(コンテキストメニュー-名前を付けて保存)またはサーバーから応答データを送信するときに、ブラウザに強制ダウンロードを指示する応答ヘッダー(Content-Disposition: attachment)を送信する必要があります。

DEXTUploadX5はウェブブラウザの技術を使用するため、ダウンロードではなく開くことができます。従って、一貫してファイルをダウンロードするためには、サーバーまたはDEXTUploadNJのようなサーバーファイルダウンロードコンポーネントを使用して、応答ヘッダーをオープンではなくダウンロードできるように設定しなければなりません。

この例は、ファイルダウンロード処理のサーブレット(CommonFileDownloadクラス)で処理され、web.xmlのcommon-download.doにマッピングされます。

# サーバーサイド

File target = null;

String key = request.getParameter("key");

if (key.equals("FID0001")) target = new File(fileRoot, "bridge_509147.jpg");
else if (key.equals("FID0002")) target = new File(fileRoot, "beach_239826.jpg");
else if (key.equals("FID0003")) target = new File(fileRoot, "cosmos (empty) 195779.jpg");

if (target == null  || target.exists() == false || target.isFile() == false) {
	response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found.");
	return;
}

try {
	// FileDownload オブジェクトを作成します。
	FileDownload dextnj = new FileDownload();
	
	// エンコーディングをUTF-8に設定する。
	response.setCharacterEncoding("UTF-8");
	
	// ファイルを添付ファイルとしてダウンロードする。(Content-Disposition: attachment ...)
	dextnj.download(request, response, target);	
} catch (Exception e) {
	throw new ServletException(e);
}

DEXTUploadX5は単一ファイルのダウンロードと限定された複数ファイルのダウンロードをサポートします(バージョン1.1.0.0以降)。

スクリプトを使用してファイルをダウンロードするには、downloadById, download関数を使用します。

複数ファイルをダウンロードするには、download関数の第2パラメータの値をtrueに設定します。

ダウンロード対象は、downUrl(またはurl)プロパティの値を持つ仮想ファイルでなければなりません。

var dx = dx5.get("component-id");

// downUrlプロパティにダウンロードWebパスが存在する必要があります。
dx.addVirtualFile({ ... name: "bridge_509147.jpg", downUrl: "http://.../service/common-download.do?key=FID0001" });

// 仮想ファイルの一意のIDを使用して、単一ファイルのダウンロードを実行する。
dx.downloadById("ダウンロードする仮想ファイルのユニークID");

// フラグの値に基づいて、単一ファイルのダウンロードを実行する。
// AUTO: 最初の仮想ファイルをダウンロードします。
// SELECTED: 選択されたオブジェクトの中から最初の仮想ファイルをダウンロードします。
// CHECKED: チェックされたオブジェクトの中から最初の仮想ファイルをダウンロードします。
dx.download("SELECTED");	

// フラグの値に応じて複数のファイルをダウンロードする。
// AUTO: すべての仮想ファイルをダウンロード
// SELECTED: 選択されたすべての仮想ファイルをダウンロード
// CHECKED: チェックされたすべての仮想ファイルをダウンロード
dx.download("SELECTED", true);

単一ファイルのダウンロードとは異なり、複数ファイルのダウンロードでは、ブラウザのパフォーマンスの問題により、ダウンロードされるファイルのサイズが制限されます。

デフォルトは100MBまでです。それ以上のファイルサイズを許可するには、setLimitMultiDownloadSize関数を使用して制限サイズを変更できます。

しかし、この関数はダウンロードが許可されるファイルのサイズを変更するものであって、ブラウザの性能に関係なくダウンロードできるように機能を提供するものではありません。 HTML5の機能を使用してファイルを連続的にダウンロードするには、一時的にダウンロード対象をメモリにロードするため、動画ファイルのような大容量のファイルは適切なマルチファイルのダウンロード対象ではありません。 したがって、大容量のダウンロード、引き継ぎなどの機能が必要な場合は、HDアプリケーションをお勧めします。

// ダウンロード制限サイズを300MBまで設定する。
dx.setLimitMultiDownloadSize(1024 * 1024 * 300);

単一ファイルのダウンロード

複数ファイルのダウンロード

(ブラウザーが最終的にファイルを保存するため(製品は参加できない)、ダウンロードが完了しても、ブラウザーは後で自分自身に問い合わせるように要求したり、追加の問い合わせがあるかもしれない)