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 */
016 package org.opengion.hayabusa.servlet;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.servlet.multipart.MultipartParser;
020 import org.opengion.hayabusa.servlet.multipart.Part;
021 import org.opengion.hayabusa.servlet.multipart.FilePart;
022 import org.opengion.hayabusa.servlet.multipart.ParamPart;
023 // import org.opengion.fukurou.util.ZipArchive; // 5.7.1.2 (2013/12/20) zip 対å¿?
024
025 import java.io.File;
026 import java.io.IOException;
027 import java.util.Map;
028 // import java.util.HashMap;
029 import java.util.TreeMap;
030 import java.util.List;
031 import java.util.ArrayList;
032 import java.util.Set;
033 import java.util.Random ;
034 import java.util.concurrent.atomic.AtomicInteger; // 5.5.2.6 (2012/05/25) findbugs対å¿?
035 import 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 */
067 public 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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 属æ???nputタグの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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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でã‚?ilePartでもありませんã€?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対応ã?為、å»?¢
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対応ã?ためå»?¢
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対応ã?ためå»?¢
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対応ã?ため、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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 ファイルアãƒ??ロードã?è¤?•°選択ï¼?ultiple?‰対å¿?
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 //}