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