58
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jQueryでファイルダウンロード

Posted at

ハマったので備忘録としてメモ。

画面でボタンをクリックするとファイルのダウンロードを行う処理。
ファイルが無い場合は画面遷移を行わずに画面へエラーメッセージまたはダイアログで通知したい。
サーバはJavaを使用。FWは使用しない。(SAStrutsなら簡単そう?)

ダイアログを出すならAjaxかなと思いjQueryを使用。
Servletの非同期呼び出しは下記のように$.postで呼び出し、パラメータとコールバックメソッドを指定する

function download(parameter) {
	query = {
		parameter : parameter,
	}
	$.post("/DownloadServlet", query, read);
}

function read(resp) {
	// コールバック関数でなんか処理
}

ただ、Ajaxだとレスポンスをjavascriptが解釈してしまい、ブラウザのダイアログによるファイルダウンロードを行うことができない。
そのため、最初の非同期呼び出しでチェック処理だけ行い、ファイルが無ければコールバック関数でダイアログを表示、ファイルがあれば別のファイルダウンロード用サーブレットを呼び出すことで対応した。

function download(parameter) {
	query = {
		parameter : parameter,
	}
	$.post("/DownloadFileCheckServlet", query, read);
}

function read(resp) {
	// コールバック関数でなんか処理
	if (resp.length == 0) {
		// レスポンスに何も入力されて無ければファイル有り(とする)サーブレットをGetメソッドで呼び出し
		location.href = "/DownloadServlet";
	} else {
		// レスポンスに入力されていればエラーメッセージとしてダイアログに出力(とする)
		alert(resp);
	}
}

これでチェック処理でエラーが発生した時はレスポンスにエラーメッセージを書き込めばダイアログが表示され、レスポンスに何も書き込まれなかった(エラーでない)場合はファイルダウンロード用サーブレットが呼ばれてブラウザによるダウンロードが開始される。

チェック処理とファイルダウンロード処理で別サーブレットになるので、セッションで値を共有しました。
ここは一時フォームを作成してPostメソッドでsubmitしても良いかもしれません。

下記のサイトを参考にさせて頂きました。ありがとうございます。
http://chez-sugi.net/journal-20070306

58
61
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?