001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.servlet; 017 018import java.io.File; 019import java.io.IOException; 020import java.util.ArrayList; 021import java.util.List; 022import java.util.Map; 023import java.util.Random ; 024import java.util.Set; 025// import java.util.HashMap; 026import java.util.TreeMap; 027import java.util.concurrent.atomic.AtomicInteger; // 5.5.2.6 (2012/05/25) findbugs対応 028 029import javax.servlet.http.HttpServletRequest; 030 031import org.opengion.hayabusa.common.HybsSystem; 032import org.opengion.hayabusa.servlet.multipart.FilePart; 033import org.opengion.hayabusa.servlet.multipart.MultipartParser; 034import org.opengion.hayabusa.servlet.multipart.ParamPart; 035// import org.opengion.fukurou.util.ZipArchive; // 5.7.1.2 (2013/12/20) zip 対応 036import org.opengion.hayabusa.servlet.multipart.Part; 037 038/** 039 * ファイルをサーバーにアップロードする場合に使用されるマルチパート処理サーブレットです。 040 * 041 * 通常のファイルアップロード時の、form で使用する、enctype="multipart/form-data" 042 * を指定した場合の、他のリクエスト情報も、取り出すことが可能です。 043 * 044 * ファイルをアップロード後に、指定のファイル名に変更する機能があります。 045 * file 登録ダイアログで指定した name に、"_NEW" という名称を付けたリクエスト値を 046 * ファイルのアップロードと同時に送信することで、この名前にファイルを付け替えます。 047 * また、アップロード後のファイル名は、name 指定の名称で、取り出せます。 048 * クライアントから登録したオリジナルのファイル名は、name に、"_ORG" という名称 049 * で取り出すことが可能です。 050 * 051 * maxPostSize : 最大転送サイズ(Byte)を指定します。 0,またはマイナスで無制限です。 052 * useBackup : ファイルアップロード時に、すでに同名のファイルが存在した場合に、 053 * バックアップ処理(renameTo)するかどうか[true/false]を指定します(初期値:false) 054 * 055 * ファイルアップロード時に、アップロード先に、同名のファイルが存在した場合は、既存機能は、そのまま 056 * 置き換えていましたが、簡易バージョンアップ機能として、useBackup="true" を指定すると、既存のファイルを 057 * リネームして、バックアップファイルを作成します。 058 * バックアップファイルは、アップロードフォルダを基準として、_backup/ファイル名.拡張子_処理時刻のlong値.拡張子 になります。 059 * オリジナルのファイル名(拡張子付)を残したまま、"_処理時刻のlong値" を追加し、さらに、オリジナルの拡張子を追加します。 060 * バックアップファイルの形式は指定できません。 061 * 062 * @og.group その他機能 063 * 064 * @version 4.0 065 * @author Kazuhiko Hasegawa 066 * @since JDK5.0, 067 */ 068public final class MultipartRequest { 069// private static volatile int dumyNewFileCnt = 1 ; // 3.8.1.4 (2006/03/17) 070 private static AtomicInteger dumyNewFileCnt = new AtomicInteger(1); // 5.5.2.6 (2012/05/25) findbugs対応 071 072 private static String RANDOM_KEY = new Random().nextInt( Integer.MAX_VALUE ) + "_" ; // 5.6.5.3 (2013/06/28) アップロード時のダミーファイル名をもう少しだけランダムにする。 073 074// private final Map<String,List<String>> parameters = new HashMap<String,List<String>>(); 075// private final Map<String,UploadedFile> files = new HashMap<String,UploadedFile>(); 076 private final Map<String,List<String>> parameters = new TreeMap<String,List<String>>(); // 5.6.5.2 (2013/06/21) ソートします。 077 078 // 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 079// private final Map<String,UploadedFile> files = new TreeMap<String,UploadedFile>(); // 5.6.5.2 (2013/06/21) ソートします。 080 private final List<UploadedFile> files = new ArrayList<UploadedFile>(); // 5.7.1.1 (2013/12/13) HTML5対応 081 082 /** 083 * MultipartRequest オブジェクトを構築します。 084 * 085 * 引数として、ファイルアップロード時の保存フォルダ、最大サイズ、エンコード、 086 * 新しいファイル名などを指定できます。新しいファイル名は、アップロードされる 087 * ファイルが一つだけの場合に使用できます。複数のファイルを同時に変更したい 088 * 場合は、アップロードルールにのっとり、リクエストパラメータで指定してください。 089 * 090 * HTML5 では、ファイルアップロード時に、multiple 属性(inputタグのtype="file")を 091 * 付ける事で、ファイルを複数選択できます。 092 * その場合は、inputのname属性は、一つなので、_NEW による名前の書き換えはできません。 093 * 094 * @og.rev 3.8.1.3A (2006/01/30) 新ファイル名にオリジナルファイル名の拡張子をセットします 095 * @og.rev 4.0.0.0 (2007/11/28) メソッドの戻り値をチェックします。 096 * @og.rev 5.5.2.6 (2012/05/25) findbugs対応。staticフィールドへの書き込みに、AtomicInteger を利用します。 097 * @og.rev 5.6.5.3 (2013/06/28) useBackup引数追加 098 * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 099 * @og.rev 5.7.4.3 (2014/03/28) inputFilename のリクエスト変数処理追加 100 * @og.rev 5.9.25.0 (2017/10/06) クラウドストレージ利用処理追加 101 * 102 * @param request HttpServletRequestオブジェクト 103 * @param saveDirectory ファイルアップロードがあった場合の保存フォルダ名 104 * @param maxPostSize ファイルアップロード時の最大ファイルサイズ(Byte)0,またはマイナスで無制限 105 * @param encoding ファイルのエンコード 106 * @param inputFilename アップロードされたファイルの新しい名前 107 * @param useBackup ファイルアップロード時に、バックアップ処理するかどうか[true/false]を指定 108 * @param fileURL クラウドストレージ用のURL 109 * @throws IOException 入出力エラーが発生したとき 110 */ 111 public MultipartRequest(final HttpServletRequest request, 112 final String saveDirectory, 113 final int maxPostSize, 114 final String encoding, 115// final String inputFilename ) throws IOException { 116 final String inputFilename, 117 final boolean useBackup, // 5.6.5.3 (2013/06/28) 追加 118 final String fileURL) throws IOException { // (2017/10/06) 追加 119 120 if(request == null) { 121 throw new IllegalArgumentException("request cannot be null"); 122 } 123 124 if(saveDirectory == null) { 125 throw new IllegalArgumentException("saveDirectory cannot be null"); 126 } 127 // 5.5.2.6 (2012/05/25) 0,またはマイナスで無制限 128// if(maxPostSize <= 0) { 129// throw new IllegalArgumentException("maxPostSize must be positive"); 130// } 131 132 // Save the dir 133 File dir = new File(saveDirectory); 134 135 // Check saveDirectory is truly a directory 136 if(!dir.isDirectory()) { 137 throw new IllegalArgumentException("Not a directory: " + saveDirectory); 138 } 139 140 // Check saveDirectory is writable 141 if(!dir.canWrite()) { 142 throw new IllegalArgumentException("Not writable: " + saveDirectory); 143 } 144 145 // Parse the incoming multipart, storing files in the dir provided, 146 // and populate the meta objects which describe what we found 147 MultipartParser parser = new MultipartParser(request, maxPostSize); 148 if(encoding != null) { 149 parser.setEncoding(encoding); 150 } 151 152 // 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 153// List<String> list = new ArrayList<String>(); 154 155 Part part; 156 while ((part = parser.readNextPart()) != null) { 157 String name = part.getName(); 158 if( part.isParam() && part instanceof ParamPart ) { 159 ParamPart paramPart = (ParamPart)part; 160 String value = paramPart.getStringValue(); 161 List<String> existingValues = parameters.get(name); 162 if(existingValues == null) { 163 existingValues = new ArrayList<String>(); 164 parameters.put(name, existingValues); 165 } 166 existingValues.add(value); 167 } 168 else if( part.isFile() && part instanceof FilePart ) { 169 FilePart filePart = (FilePart)part; 170// String fileName = filePart.getFilename(); 171 String orgName = filePart.getFilename(); // 5.7.1.1 (2013/12/13) 判りやすいように変数名変更 172// if(fileName != null) { 173 if(orgName != null) { 174 // 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 175 // 同一 name で、複数ファイルを扱う必要があります。 176// list.add( name ); // 3.5.6.5 (2004/08/09) 指定の name 属性 177 // 3.8.1.2 (2005/12/19) 仮ファイルでセーブする。 178// String newName = String.valueOf( dumyNewFileCnt++ ) ; // 3.8.1.4 (2006/03/17) 179// String newName = String.valueOf( dumyNewFileCnt.getAndIncrement() ) ; // 5.5.2.6 (2012/05/25) findbugs対応 180 String uniqKey = RANDOM_KEY + dumyNewFileCnt.getAndIncrement() ; // 5.6.5.3 (2013/06/28) アップロード時のダミーファイル名をもう少しだけランダムにする。 181// filePart.setFilename( newName ); // 5.6.5.3 (2013/06/28) newName はややこしいので、変更 182 filePart.setFilename( uniqKey ); 183 184 // 標準のファイル書き込み 2017/10/06 DELETE クラウドストレージ利用判定を追加 185 // filePart.writeTo(dir); 186 187 // 2017/10/06 ADD システムリソースにクラウドストレージ利用が登録されている場合は、クラウドストレージを利用する 188 String storage = HybsSystem.sys( "CLOUD_STORAGE"); 189 190 if(storage != null && storage.length() > 0){ 191 // クラウドストレージにアップロード 192 filePart.writeToCloud(storage, fileURL, request.getSession(true)); 193 }else{ 194 // 標準のファイル書き込み 195 filePart.writeTo(dir); 196 } 197 198 // 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 199 files.add( new UploadedFile( 200 uniqKey, // 5.7.1.1 (2013/12/13) 順番変更 201 dir.toString(), 202 name, // 5.7.1.1 (2013/12/13) 項目追加 203// fileName, 204 orgName, 205 filePart.getContentType())); 206 207// files.put(name, 208// new UploadedFile( dir.toString(), 209//// newName, // 3.8.1.2 (2005/12/19) 210// tempName, // 3.8.1.2 (2005/12/19) 211// fileName, 212// filePart.getContentType())); 213 } 214// else { 215// files.put(name, new UploadedFile(null, null, null, null)); 216// } 217 } 218 else { 219 String errMsg = "Partオブジェクトが、ParamPartでもFilePartでもありません。" 220 + " class=[" + part.getClass() + "]"; 221 throw new RuntimeException( errMsg ); 222 } 223 } 224 225 // 5.7.4.3 (2014/03/28) inputFilename は、リクエスト変数が使えるようにします。 226 String filename = getReqParamFileName( inputFilename ) ; 227 228 // 3.5.6.5 (2004/08/09) 登録後にファイルをリネームします。 229 // 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 230// int size = list.size(); 231 int size = files.size(); 232 233 // 5.7.1.2 (2013/12/20) zip 対応 234 // 5.9.25.0 (2017/10/06) FileをString型に変更 235 //File[] tgtFiles = new File[size]; 236 String[] tgtFiles = new String[size]; 237 238// boolean isZip = ( inputFilename != null && inputFilename.endsWith( ".zip" ) ); 239 boolean isZip = ( filename != null && filename.endsWith( ".zip" ) ); 240 241 for( int i=0; i<size; i++ ) { 242// String name = list.get(i); 243// File file = getFile( name ); 244 UploadedFile upFile = files.get(i); 245 String name = upFile.getName(); // 5.7.1.1 (2013/12/13) 246 247// String newName = (isZip) ? null : inputFilename ; 248 String newName = (isZip) ? null : filename ; 249 if( newName == null && name != null ) { 250 int adrs = name.lastIndexOf( HybsSystem.JOINT_STRING ); // カラム__行番号 の __ の位置 251 if( adrs < 0 ) { 252 newName = getParameter( name + "_NEW" ); 253 } 254 else { 255 newName = getParameter( name.substring( 0,adrs ) + "_NEW" + name.substring( adrs ) ); 256 } 257 } 258 259 // 5.7.1.1 (2013/12/13) UploadedFile 内で処理するように変更 260 // 5.9.25.0 (2017/10/06) MODIFY fileURLとsessionを追加 261// tgtFiles[i] = upFile.renameTo( newName,useBackup); 262 tgtFiles[i] = upFile.renameTo( newName,useBackup,fileURL,request.getSession(true)); 263 264// // 3.8.1.3 (2006/02/06) 新ファイル名に拡張子がないとき 265// // 旧ファイル名から拡張子取得し新ファイル名に文字列連結 266// if( newName != null && newName.length() > 0 ) { 267// // 新ファイル名から拡張子取得 268// String newExt = getExtension( newName ); 269// if( newExt == null || newExt.length() == 0 ) { 270//// String oldExt = getExtension( getOriginalFileName( name ) ); // 5.7.1.1 (2013/12/13) 271// String oldExt = getExtension( upFile.getOriginalFileName() ); 272//// newName = new StringBuilder().append( newName ).append( "." ).append( oldExt ).toString(); 273// newName = newName + "." + oldExt ; 274// } 275// } 276// else { 277//// newName = getOriginalFileName( name ); // 5.7.1.1 (2013/12/13) 278// newName = upFile.getOriginalFileName(); 279// } 280// 281// // 3.8.1.2 (2005/12/19) 基本的にはすべてのケースでファイル名変更が発生する。 282// File file = upFile.getFile(); // 5.7.1.1 (2013/12/13) 283// if( file != null && newName != null && newName.length() > 0 ) { 284// File newFile = new File( dir,newName ); 285// 286// // 5.6.5.3 (2013/06/28) useBackup ファイルアップロード時に、バックアップ処理するかどうか[true/false]を指定 287//// if( newFile.exists() && !newFile.delete() ) { 288//// String errMsg = "既存のファイル[" + newName + "]が削除できませんでした。"; 289//// throw new RuntimeException( errMsg ); 290//// } 291// if( newFile.exists() ) { 292// if( useBackup ) { 293// // newName にフォルダ階層を含む場合に、そなえて。 294// File parent = newFile.getParentFile(); // バックアップすべきファイルのフォルダ 295// File backup = new File( parent , "_backup" ); // その直下に、"_backup" フォルダを作成 296// if( backup != null && !backup.exists() && !backup.mkdirs() ) { 297// String errMsg = "バックアップ処理でbackupフォルダの作成に失敗しました。[" + backup + "]"; 298// throw new RuntimeException( errMsg ); 299// } 300// // バックアップファイル名は、元のファイル名(拡張子含む) + "_" + 現在時刻のlong値 + "." + 元のファイルの拡張子 301// String bkupName = newFile.getName() + "_" + System.currentTimeMillis() + "." + getExtension( newName ) ; 302// File fromFile = new File( dir,newName ); // オリジナルの newFile をrename するとまずいので、同名のFileオブジェクトを作成 303// File bkupFile = new File( backup,bkupName ); 304// 305// if( !fromFile.renameTo( bkupFile ) ) { 306// String errMsg = "バックアップ処理でバックアップファイルをリネームできませんでした。[" + bkupFile + "]" ; 307// throw new RuntimeException( errMsg ); 308// } 309// } 310// else if( !newFile.delete() ) { 311// String errMsg = "既存のファイル[" + newName + "]が削除できませんでした。"; 312// throw new RuntimeException( errMsg ); 313// } 314// } 315// 316//// file.renameTo( newFile ); 317// if( !file.renameTo( newFile ) ) { 318// String errMsg = "所定のファイルをリネームできませんでした。[" + file + "]" ; 319// throw new RuntimeException( errMsg ); 320// } 321//// UploadedFile fup = files.get( name ); 322//// fup.setFilesystemName( newName ); 323// upFile.setFilesystemName( newName ); 324// } 325 } 326 // 5.7.1.2 (2013/12/20) zip 対応 327 // 5.7.4.3 (2014/03/28) 一旦保留にしていましたが、復活します。 328 // if( isZip ) { 329// // File zipFile = new File( saveDirectory,inputFilename ); 330 // File zipFile = new File( saveDirectory,filename ); 331 // ZipArchive.compress( tgtFiles,zipFile ); 332 // } 333 } 334 335 /** 336 * リクエストパラメータの名前配列を取得します。 337 * 338 * @return リクエストパラメータの名前配列 339 */ 340 public String[] getParameterNames() { 341 Set<String> keyset = parameters.keySet(); 342 return keyset.toArray( new String[keyset.size()] ); 343 } 344 345 /** 346 * ファイルアップロードされたファイル群のファイル名配列を取得します。 347 * 348 * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応の為、廃止 349 * 350 * @return アップロードされたファイル名配列 351 */ 352// public String[] getFilenames() { 353// Set<String> keyset = files.keySet(); 354// return keyset.toArray( new String[keyset.size()] ); 355// } 356 357 /** 358 * ファイルアップロードされたファイル群のファイル配列を取得します。 359 * 360 * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 361 * 362 * @return アップロードされたファイル群 363 */ 364 public UploadedFile[] getUploadedFile() { 365 return files.toArray( new UploadedFile[files.size()] ); 366 } 367 368 /** 369 * 指定の名前のリクエストパラメータの値を取得します。 370 * 371 * 複数存在する場合は、一番最後の値を返します。 372 * 373 * @param name リクエストパラメータ名 374 * 375 * @return パラメータの値 376 */ 377 public String getParameter( final String name ) { 378 List<String> values = parameters.get(name); 379 if( values == null || values.isEmpty() ) { 380 return null; 381 } 382 return values.get(values.size() - 1); 383 } 384 385 /** 386 * 指定の名前のリクエストパラメータの値を配列型式で取得します。 387 * 388 * @og.rev 5.3.2.0 (2011/02/01) 新規作成 389 * 390 * @param name リクエストパラメータ名 391 * 392 * @return パラメータの値配列 393 */ 394 public String[] getParameters( final String name ) { 395 List<String> values = parameters.get(name); 396 if( values == null || values.isEmpty() ) { 397 return null; 398 } 399// return values.toArray( new String[0] ); 400 return values.toArray( new String[values.size()] ); 401 } 402 403 /** 404 * 指定の名前のリクエストパラメータの値を配列(int)型式で取得します。 405 * 406 * @og.rev 5.3.2.0 (2011/02/01) 新規作成 407 * @og.rev 5.3.6.0 (2011/06/01) 配列値が""の場合にNumberFormatExceptionが発生するバグを修正 408 * 409 * @param name リクエストパラメータ名 410 * 411 * @return パラメータの値配列 412 */ 413 public int[] getIntParameters( final String name ) { 414 List<String> values = parameters.get(name); 415 if( values == null || values.isEmpty() ) { 416 return null; 417 } 418 419// int[] rtn = new int[values.size()]; 420// for( int i=0; i<values.size(); i++ ) { 421// rtn[i] = Integer.valueOf( values.get(i) ); 422// } 423 424 // 5.3.6.0 (2011/06/01) ゼロストリング("")はint変換対象から予め除外する 425 List<Integer> intVals = new ArrayList<Integer>(); 426 for( int i=0; i<values.size(); i++ ) { 427 String str = values.get(i); 428 if( str != null && str.length() > 0 ) { 429 intVals.add( Integer.parseInt( str ) ); 430 } 431 } 432 if( intVals.isEmpty() ) { 433 return null; 434 } 435 436 int[] rtn = new int[intVals.size()]; 437 for( int i=0; i<intVals.size(); i++ ) { 438 rtn[i] = intVals.get(i).intValue(); 439 } 440 441 return rtn; 442 } 443 444 /** 445 * 指定の名前の ファイル名のリクエスト変数処理を行います。 446 * 447 * filename 属性のみ、{@XXXX} のリクエスト変数が使えるようにします。 448 * 449 * @og.rev 5.7.4.3 (2014/03/28) 新規追加 450 * 451 * @param fname ファイル名 452 * @return リクエスト変数を処理したファイル名 453 */ 454 private String getReqParamFileName( final String fname ) { 455 456 String rtn = fname ; 457 if( fname != null ) { 458 StringBuilder filename = new StringBuilder( fname ) ; 459 int st = filename.indexOf( "{@" ); 460 while( st >= 0 ) { 461 int ed = filename.indexOf( "}",st ); 462 if( ed < 0 ) { 463 String errMsg = "{@XXXX} の対応関係が取れていません。" 464 + " filename=[" + fname + "]"; 465 throw new RuntimeException( errMsg ); 466 } 467 String key = filename.substring( st+2,ed ); // "}" は切り出し対象外にする。 468 String val = getParameter( key ); 469 filename.replace( st,ed+1,val ); // "}" を含めて置換したいので、ed+1 470 // 次の "{@" を探す。開始は置換文字数が不明なので、st から始める。 471 st = filename.indexOf( "{@",st ); 472 } 473 rtn = filename.toString(); 474 } 475 return rtn ; 476 } 477 478 /** 479 * 指定の名前の UploadedFile オブジェクトから 登録されるファイル名を取得します。 480 * 481 * 登録されるファイル名とは、新たに書き換えられたファイル名のことです。 482 * 483 * @og.rev 5.6.6.1 (2013/07/12) null 対策 484 * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応のため廃止 485 * 486 * @param name キー情報 487 * 488 * @return 新たに書き換えられたファイル名 489 */ 490// public String getFilesystemName( final String name ) { 491// UploadedFile file = files.get(name); 492//// return file.getFilesystemName(); // may be null 493// return (file == null) ? null : file.getFilesystemName(); // may be null 494// } 495 496 /** 497 * 指定の名前の UploadedFile オブジェクトから アップロードされたファイル名を取得します。 498 * 499 * アップロードされたファイル名とは、オリジナルのファイル名のことです。 500 * 501 * @og.rev 5.6.6.1 (2013/07/12) null 対策 502 * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応のため廃止 503 * 504 * @param name キー情報 505 * 506 * @return オリジナルのファイル名 507 */ 508// public String getOriginalFileName( final String name ) { 509// UploadedFile file = files.get(name); 510//// return file.getOriginalFileName(); // may be null 511// return (file == null) ? null : file.getOriginalFileName(); // may be null 512// } 513 514 /** 515 * 指定の名前の UploadedFile オブジェクトから File オブジェクトを取得します。 516 * 517 * @og.rev 5.6.6.1 (2013/07/12) null 対策 518 * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 519 * 520 * @param name キー情報 521 * 522 * @return Fileオブジェクト 523 */ 524// public File getFile( final String name ) { 525// UploadedFile file = files.get(name); 526//// return file.getFile(); // may be null 527// return (file == null) ? null : file.getFile(); // may be null 528// } 529 530 /** 531 * ファイル名から 拡張子を取得します。 532 * 533 * @og.rev 5.7.1.1 (2013/12/13) UploadedFileクラスに移動 534 * 535 * @param fileName ファイル名 536 * @return 拡張子 537 */ 538// private String getExtension( final String fileName ) { 539// int index = fileName.lastIndexOf('.'); 540// if(index!=-1) { 541// return fileName.substring(index + 1, fileName.length()); 542// } 543// return ""; 544// } 545} 546 547/** 548 * ファイルをサーバーにアップロードする場合に使用されるファイル管理内部クラスです。 549 * 550 * @og.group その他機能 551 * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応のため、public化 552 * 553 * @version 4.0 554 * @author Kazuhiko Hasegawa 555 * @since JDK5.0, 556 */ 557//final class UploadedFile { 558// 559// private String filename; 560// private final String name; 561// private final String dir; 562// private final String original; 563// private final String type; 564// 565// /** 566// * アップロードファイルの管理オブジェクトを作成します。 567// * 568// * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 569// * 570// * @param dir ファイルを保管するフォルダ 571// * @param name ファイルアップロードされた時のname属性 572// * @param filename ファイル名(置き換え後) 573// * @param original ファイル名(オリジナル) 574// * @param type コンテントタイプ 575// */ 576// UploadedFile( final String dir, final String name, final String filename, final String original, final String type) { 577// this.dir = dir; 578// this.name = name; 579// this.filename = filename; 580// this.original = original; 581// this.type = type; 582// } 583// 584// /** 585// * ファイルアップロードされた時のname属性を取得します。 586// * 587// * @og.rev 5.7.1.1 (2013/12/13) HTML5 ファイルアップロードの複数選択(multiple)対応 588// * 589// * @return ファイルアップロードされた時のname属性 590// */ 591// public String getName() { 592// return name; 593// } 594// 595// /** 596// * コンテントタイプを取得します。 597// * 598// * @return コンテントタイプ 599// */ 600// public String getContentType() { 601// return type; 602// } 603// 604// /** 605// * ファイル名(置き換え後)を取得します。 606// * 607// * @return ファイル名(置き換え後) 608// */ 609// public String getFilesystemName() { 610// return filename; 611// } 612// 613// /** 614// * ファイル名(置き換え後)をセットします。 615// * 616// * @param name ファイル名(置き換え後) 617// */ 618// public void setFilesystemName( final String name ) { 619// filename = name; 620// } 621// 622// /** 623// * ファイル名(オリジナル)を取得します。 624// * 625// * @return ファイル名(オリジナル) 626// */ 627// public String getOriginalFileName() { 628// return original; 629// } 630// 631// /** 632// * ファイル名(置き換え後)の File オブジェクトを取得します。 633// * 634// * @return File File オブジェクト 635// */ 636// public File getFile() { 637// if(dir == null || filename == null) { 638// return null; 639// } 640// else { 641// return new File(dir + File.separator + filename); 642// } 643// } 644//}