ファイル項目ダウンロード
リポジトリで定義したモデル内に存在するすべてのファイル型項目のダウンロード時に共通で呼び出されるスクリプトです。この実体は WEB-INF/script/DownloadFile_beforeDownload.js です。
利用できる暗黙変数
スクリプトでは次の暗黙変数を利用できます。各変数は参照のみの利用となります。
変数名 |
説明 |
filename |
ダウンロードするファイルの名前です。 |
path |
ダウンロードするファイルの実体を示すパスです。"ファイル型項目名_jshfilename" の値になります。 |
modelId |
対象モデルのIDです。 |
pkey |
対象モデルの主キーです。 |
modelitemName |
対象モデルの項目名です。 |
p.user.getUsername() |
ログオンアカウントの名前です。 |
次のスクリプトは、すべての暗黙条件の値を表示するものです。
print("DownloadFile_beforeDownload variables.");
print("filename="+filename);
print("path="+path);
print("modelId="+modelId);
print("pkey="+pkey);
print("modelitemName="+modelitemName);
print("userid="+p.user.getUsername());
ダウンロード処理を中止する
スクリプトで何らかの文字列を return で返した場合、このダウンロード処理は中止されます。return で返された文字列はエラーメッセージとして画面に表示されます。
ファイル項目アップロード
リポジトリで定義したモデル内に存在するすべてのファイル型項目のアップロード時に共通で呼び出されるスクリプトです。この実体は WEB-INF/script/UpdateFile_afterUpload.js です。
利用できる暗黙変数
スクリプトでは次の暗黙変数を利用できます。各変数は参照のみの利用となります。
変数名 |
説明 |
filename |
ダウンロードするファイルの名前です。 |
path |
ダウンロードするファイルの実体を示すパスです。"ファイル型項目名_jshfilename" の値になります。 |
modelId |
対象モデルのIDです。 |
次のスクリプトは、すべての暗黙条件の値を表示するものです。
print("UpdateFile_afterUpload")
print("filename="+filename);
print("path="+path);
print("modelId="+modelId);
アップロード処理を中止する
スクリプトで何らかの文字列を return で返した場合、このアップロード処理は中止されます。return で返された文字列はエラーメッセージとして画面に表示されます。
応用 ウィルスチェック
すべてのファイルのダウンロード時およびアップロード時に、ウィルスチェックを行うという要件を想定します。ウィルスチェックサービスはネットワーク上に REST API のサービスとして提供されているものとします。同サービスが不適切と判断した場合、エラーメッセージを表示してダウンロード(およびアップロード)を中止します。
ダウンロードスクリプト
次のようにします。
return checkFile(filename, path);
アップロードスクリプト
次のようにします。
return checkFile(filename, path);
共通関数
ダウンロード処理およびアップロード処理から呼び出される関数 checkFile を定義します。
function checkFile(filename, filepath) {
if (filename === null || filepath === null
|| filename.length === 0 || filepath.length === 0) {
return null;
}
var url = "http://localhost:18080/serv/check.php";//ダミーのサービスとして。
var file = new java.io.File(filepath);
if (! file.canRead()) {
print("Can not read file "+file);
return "ファイルの読み込みができません";
}
print("file size "+file.length());
var client = new org.apache.commons.httpclient.HttpClient();
var post = new org.apache.commons.httpclient.methods.PostMethod(url);
var parts = [ new org.apache.commons.httpclient.methods.multipart.FilePart("file", filename, file) ];
post.setRequestEntity(new org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity(parts, post.getParams()));
try {
print("send file");
var code = client.executeMethod(post);
print("response code "+code);
if (code >= 400) {
return "不正なファイルです。";
}
} catch (e) {
print("failed, file "+e);
return "ファイルの送信に失敗しました。";
}
return null;
}
- このスクリプトでは、ダミーのサービス(URL)に Apache Commons HttpClient を使ってファイルを(マルチパートリクエストで)送信しています。そのレスポンスコードが400以上なら不正なファイルとしてエラーとしています。