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.taglib;
017
018 import static org.opengion.fukurou.util.StringUtil.nval;
019
020 import java.io.File;
021 import java.io.IOException;
022 import java.util.Arrays;
023
024 import javax.servlet.http.HttpServletRequest;
025
026 import org.opengion.fukurou.util.StringUtil;
027 import org.opengion.hayabusa.common.HybsSystem;
028 import org.opengion.hayabusa.common.HybsSystemException;
029 import org.opengion.hayabusa.db.DBColumn;
030 import org.opengion.hayabusa.db.DBTableModel;
031 import org.opengion.hayabusa.db.DBTableModelUtil;
032 import org.opengion.hayabusa.servlet.MultipartRequest;
033
034 /**
035 * クライアントã?ファイルをサーバã?にアãƒ??ロードするタグですã?
036 *
037 * アãƒ??ロード後ã?属æ?は、DBTableModel に格納することによりã€??常のãƒ??タと
038 * 同様ã?取り出し方が可能ですã?
039 * またã?通常のファイルアãƒ??ロード時の、form で使用する、enctype="multipart/form-data"
040 * を指定したå?合ã?、他ã?リクエスト情報もã?{@XXXX} 変数で取り出すことが可能ですã?
041 *
042 * こã? upload タグでは、アãƒ??ロード後に、指定ã?ファイル名に変更する機è?がありますã?
043 * file 登録ãƒ?‚¤アログでæŒ?®šしã�?name にã€?_NEW" とã�?�†名称を付けたリクエストå?ã‚?
044 * ファイルのアãƒ??ロードと同時に送信することで、この名前にファイルを付け替えますã?
045 * またã?アãƒ??ロード後ã?ファイル名ã?、name æŒ?®šã?名称で、取りå?せますã?
046 * クライアントから登録したオリジナルのファイル名ã?、name にã€?_ORG" とã�?�†名称
047 * で取り出すことが可能ですã?
048 *
049 * 通常では、これらのパラメータをã?RequestAttribute 変数にセãƒ?ƒˆしますã?で、{@XXXX}で
050 * 取り出すことが可能になりますã?さらにã€?KEY","VALUE","ISFILE" のカラãƒ?‚’持ったã?
051 * DBTableModel にセãƒ?ƒˆしますã?
052 *
053 * 新機è?として、columns を指定する事で、columns のカラãƒ?‚’持つ DBTableModel にセãƒ?ƒˆしますã?
054 * そã?場合ã?、カラãƒ?��_01 ??カラãƒ?��_99 のように、アンãƒ??バã?で列データとなるキーを定義してくださいã€?
055 * アンãƒ??バã?がなã�??合ã?、カラãƒ?� け作æ?されますã?カラãƒ?��と同じリクエストがあればã€?
056 * すべてのレコードに同じ値がセãƒ?ƒˆされますã?
057 *
058 * 新ファイル名に拡張子が設定されてã�?�ªã�??合ã?、オリジナルファイル名ã?拡張子をセãƒ?ƒˆしますã?
059 *
060 * @og.formSample
061 * ●形式ï¼?lt;og:upload fileURL="…" maxPostSize="…" />
062 * ●body?šなã�?
063 *
064 * ●Tag定義??
065 * <og:upload
066 * fileURL 【TAG】ファイルをアãƒ??ロードするディレクトリを指定しまã�?(初期値:FILE_URL[=filetemp/])
067 * filename 【TAGã€?通常使ã�?�¾せん)ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしまã�?
068 * maxPostSize 【TAG】最大転送サイズ(Byte)を指定しまã�?初期値:10485760) 0,またã?マイナスで無制限ですã?
069 * scope 【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
070 * tableId 【TAGã€?通常使ã�?�¾せん)sessionからæ‰?¾—すã‚?DBTableModelオブジェクトã? ID
071 * columns 【TAG】DBTableModel作æ?時に、指定ã?カラãƒ??"_01"??_99"の添え字をレコードとして作æ?しますã?
072 * useBackup 【TAG】ファイルアãƒ??ロード時に、すでに同名のファイルが存在した場合に、バãƒ?‚¯アãƒ??処ç�?renameTo)するかどã�?�‹[true/false]を指定しまã�?初期値:false)
073 * language 【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
074 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
075 * />
076 *
077 * ●使用ä¾?:
078 * 【query.jspã€?
079 * <form method="POST" action="result.jsp" enctype="multipart/form-data" target="RESULT">
080 * <table summary="layout" >
081 * <tr><og:input type="text" name="submitter" value="{@USER.JNAME}" size="20" msg="MSG0014" /></tr>
082 * <tr>
083 * <og:input type="file" name="file_01" size="30" msg="MSG0015" />
084 * <og:input name="file_01_NEW" size="10" lbl="FILENAME" />
085 * </tr><tr>
086 * <og:input type="file" name="file_02" size="30" msg="MSG0015" />
087 * <og:input name="file_02_NEW" size="10" lbl="FILENAME" />
088 * </tr><tr>
089 * <og:input type="file" name="file_03" size="30" msg="MSG0015" />
090 * <og:input name="file_03_NEW" size="10" lbl="FILENAME" />
091 * </tr><tr>
092 * <og:column name="writable" value="false" />
093 * </tr>
094 * </table>
095 *
096 * 【result.jspã€?
097 * <og:upload
098 * fileURL = "{@USER.ID}"
099 * />
100 * <br />
101 * <og:message msg="MSG0003" comment="ファイルの登録が完äº?�—ましたã€? />
102 *
103 * <og:view
104 * command = "NEW"
105 * viewFormType = "HTMLTable"
106 * writable = "{@writable}"
107 * />
108 *
109 * <table>
110 * <tr><og:input name="submitter" value="{@submitter}" /></tr>
111 * <tr><og:input name="writable" value="{@writable}" /></tr>
112 * <tr><og:input name="directory" value="{@directory}" /></tr>
113 * <tr><og:input name="file_01" value="{@file_01}" /></tr>
114 * <tr><og:input name="file_01_NEW" value="{@file_01_NEW}" /></tr>
115 * <tr><og:input name="file_01_ORG" value="{@file_01_ORG}" /></tr>
116 * <tr><og:input name="file_02" value="{@file_02}" /></tr>
117 * <tr><og:input name="file_02_NEW" value="{@file_02_NEW}" /></tr>
118 * <tr><og:input name="file_02_ORG" value="{@file_02_ORG}" /></tr>
119 * <tr><og:input name="file_03" value="{@file_03}" /></tr>
120 * <tr><og:input name="file_03_NEW" value="{@file_03_NEW}" /></tr>
121 * <tr><og:input name="file_03_ORG" value="{@file_03_ORG}" /></tr>
122 * </table>
123 *
124 * 【result.jspã€?
125 * <og:upload
126 * fileURL = "{@USER.ID}"
127 * columns = "submitter,file"
128 * />
129 * <br />
130 * <og:message msg="MSG0003" comment="ファイルの登録が完äº?�—ましたã€? />
131 *
132 * <og:view
133 * command = "NEW"
134 * viewFormType = "HTMLTable"
135 * writable = "{@writable}"
136 * />
137 *
138 * @og.group ファイル入åŠ?
139 *
140 * @version 4.0
141 * @author Kazuhiko Hasegawa
142 * @since JDK5.0,
143 */
144 public class FileUploadTag extends CommonTagSupport {
145 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
146 private static final String VERSION = "5.6.6.1 (2013/07/12)" ;
147
148 private static final long serialVersionUID = 566120130712L ;
149
150 // 3.5.2.0 (2003/10/20) カラãƒ?��に、ISFILEを追åŠ??
151 private static final String[] names = new String[] { "KEY","VALUE","ISFILE" };
152 private static final String ENCODE = "UTF-8"; // 3.5.2.0 (2003/10/20) å»?¢
153 private String fileURL = HybsSystem.sys( "FILE_URL" );
154 private String filename = null; // 3.5.4.2 (2003/12/15)
155
156 private int maxPostSize = 10*1024*1024; // æœ?¤§ファイル容é‡? 10MB
157 private String tableId = HybsSystem.TBL_MDL_KEY ;
158
159 // 5.6.5.2 (2013/06/21) DBTableModel作æ?時に、指定ã?カラãƒ??"_01"??_99"の添え字をレコードとして作æ?しますã?
160 private String columns = null;
161 // 5.6.5.3 (2013/06/28) ファイルアãƒ??ロード時に、すでに同名のファイルが存在した場合に、バãƒ?‚¯アãƒ??処ç�?renameTo)するかどã�?�‹[true/false]を指定しまã�?初期値:false)
162 private boolean useBackup = false;
163
164 /**
165 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
166 *
167 * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?取得方法変更
168 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
169 * @og.rev 3.1.3.0 (2003/04/10) UTF-8 決め打ちのエンコード情報を取得するã?
170 * @og.rev 3.5.2.0 (2003/10/20) scope 属æ?を追åŠ??
171 * @og.rev 3.5.4.2 (2003/12/15) ファイル名をæŒ?®šできるようにしますã?
172 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
173 * @og.rev 3.7.1.1 (2005/05/23) フォルãƒ?�Œなã�??合ã?、è¤?•°階層åˆ??フォルãƒ?‚’自動で作æ?しますã?
174 * @og.rev 3.8.1.3A (2006/01/30) 新ファイル名にオリジナルファイル名ã?拡張子をセãƒ?ƒˆしまã�?
175 * @og.rev 5.3.7.0 (2011/07/01) エラーメãƒ?‚»ージå†?®¹変更
176 * @og.rev 5.6.5.2 (2013/06/21) columns 属æ?の追åŠ?
177 * @og.rev 5.6.5.3 (2013/06/28) useBackup 属æ?の追åŠ?
178 *
179 * @return 後続å?ç�??æŒ?¤º
180 */
181 @Override
182 public int doEndTag() {
183 debugPrint(); // 4.0.0 (2005/02/28)
184 startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19)
185 HttpServletRequest request = (HttpServletRequest)getRequest();
186
187 try {
188 String directory = HybsSystem.url2dir( fileURL );
189 File dir = new File(directory);
190 if( ! dir.exists() && ! dir.mkdirs() ) {
191 String errMsg = "ãƒ?‚£レクトリの作æ?に失敗しましたã€?" + directory + "]";
192 throw new HybsSystemException( errMsg );
193 }
194
195 // 3.8.1.3A (2006/01/30) 新ファイル名にオリジナルファイル名ã?拡張子をセãƒ?ƒˆしまã�?
196 // MultipartRequest multi = new MultipartRequest( request,directory,maxPostSize,ENCODE,filename );
197 // 5.6.5.3 (2013/06/28) useBackup 属æ?の追åŠ?
198 MultipartRequest multi = new MultipartRequest( request,directory,maxPostSize,ENCODE,filename,useBackup );
199 // 5.6.5.2 (2013/06/21) columns 属æ?の追åŠ?
200 // DBTableModel table = makeDBTable( multi );
201 DBTableModel table = null;
202 if( columns == null ) { // 5.6.5.2 (2013/06/21) columns 属æ?の追åŠ?
203 table = makeDBTable( multi );
204 }
205 else {
206 table = makeDBTableFromClms( multi );
207 }
208
209 // 3.5.2.0 (2003/10/20) scope 属æ?を追åŠ??
210 // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
211 if( ! commitTableObject( tableId, table ) ) {
212 jspPrint( "FileUploadTag Query処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
213 return (SKIP_PAGE);
214 }
215
216 } catch(IOException ex) {
217 // String errMsg = "ファイルの取り扱ã�?¸にエラーが発生しましたã€?
218 // + toString() + HybsSystem.CR
219 // + "FileURL=" + fileURL + HybsSystem.CR
220 // + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正
221 String errMsg = "ファイル登録エラー??
222 + ex.getMessage() + HybsSystem.CR // 5.3.7.0 (2011/07/01) errMsg 修正
223 + "(" + toString() + HybsSystem.CR
224 + "FileURL=" + fileURL + ")";
225 throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
226 }
227
228 return(EVAL_PAGE);
229 }
230
231 /**
232 * タグリブオブジェクトをリリースしますã?
233 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
234 *
235 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
236 * @og.rev 3.0.1.1 (2003/03/06) columns をå»?¢
237 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
238 * @og.rev 3.5.4.2 (2003/12/15) ファイル名をæŒ?®šできるようにしますã?
239 * @og.rev 5.6.5.2 (2013/06/21) columns 属æ?の追åŠ?
240 * @og.rev 5.6.5.2 (2013/06/21) useBackup 属æ?の追åŠ?
241 *
242 */
243 @Override
244 protected void release2() {
245 super.release2();
246 fileURL = HybsSystem.sys( "FILE_URL" );
247 maxPostSize = 10*1024*1024; // æœ?¤§ファイル容é‡? 10MB
248 tableId = HybsSystem.TBL_MDL_KEY ;
249 filename = null; // 3.5.4.2 (2003/12/15)
250 columns = null; // 5.6.5.2 (2013/06/21)
251 useBackup = false; // 5.6.5.3 (2013/06/28)
252 }
253
254 /**
255 * ファイルアãƒ??ロードã?実行結果ã‚?DBTableModel に記述しますã?
256 *
257 * ここではã€?KEY","VALUE","ISFILE" のカラãƒ?�«対して、å?を設定してã�?��ますã?
258 * 同時に、RequestAttribute 変数に、これらの値をセãƒ?ƒˆすることでã€?
259 * {@XXXX} で値が取りå?せる様にしてã�?�¾すã?
260 *
261 * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?取得方法変更
262 * @og.rev 3.0.1.1 (2003/03/06) request æƒ??から{@XXXX} で値が取りå?せる様に修正ã€?
263 * @og.rev 3.5.2.0 (2003/10/20) カラãƒ?��(KEY,VALUE)に ISFILE を追åŠ?
264 * @og.rev 3.5.6.5 (2004/08/09) MultipartRequest 変更に伴なã�?¿®正(Enum変更、å?ファイル名取å¾?
265 * @og.rev 3.5.6.6 (2004/08/23) 上記変更時ã?バグ修正ã€?
266 * @og.rev 3.5.6.6 (2004/08/23) å…?ƒ•ァイルのキーをã?XXXX_ORG にしますã?
267 * @og.rev 4.0.0.0 (2007/10/12) ãƒ??ブルモãƒ?ƒ«の登録方法を変更
268 * @og.rev 5.3.2.0 (2011/02/01) チェãƒ?‚¯行ã?パラメーターはint配å?側に変換して復å…?�™るã?パラメーター名を保存するã?
269 * @og.rev 5.4.4.2 (2012/02/03) CommonTagSupportと同様ã?チェãƒ?‚¯ボックス判定を行う
270 *
271 * @param multi MultipartRequestオブジェクãƒ?
272 *
273 * @return ãƒ??ブルモãƒ?ƒ«
274 */
275 private DBTableModel makeDBTable( final MultipartRequest multi ) {
276
277 DBTableModel table = DBTableModelUtil.newDBTable();
278
279 table.init( names.length );
280
281 for( int i=0; i<names.length; i++ ) {
282 DBColumn dbColumn = getDBColumn( names[i] );
283 table.setDBColumn( i,dbColumn );
284 }
285
286 String[] values ; // 4.0.0.0 (2007/10/12)
287
288 String[] files = multi.getFilenames(); // 3.6.0.0 (2004/09/17)
289 for( int i=0; i<files.length; i++ ) {
290 String name = files[i];
291 File fin = multi.getFile(name);
292 if( fin != null ) {
293 String val = multi.getFilesystemName(name);
294
295 // "KEY","VALUE","ISFILE" のé ?�«ãƒ??タを作æ?しますã?
296 values = new String[] { name, val, "1" };
297 table.addColumnValues( values );
298 setRequestAttribute( name,val );
299
300 String orgName = name + "_ORG" ;
301 val = multi.getOriginalFileName(name); // 注意:取得ã?ã€??信å�?
302
303 // "KEY","VALUE","ISFILE" のé ?�«ãƒ??タを作æ?しますã?
304 values = new String[] { orgName, val, "2" };
305 table.addColumnValues( values );
306 setRequestAttribute( orgName,val );
307 }
308 }
309
310 // "KEY","VALUE","ISFILE" のé ?�«ãƒ??タを作æ?しますã?
311 values = new String[] { "directory", fileURL, "0" };
312 table.addColumnValues( values );
313 setRequestAttribute( "directory",fileURL );
314
315 String[] params = multi.getParameterNames();
316 for( int i=0; i<params.length; i++ ) {
317 String name = params[i];
318 // 5.3.2.0 (2011/02/01) チェãƒ?‚¯行ã?パラメーターはint配å?側に変換
319 if ( HybsSystem.ROW_SEL_KEY.equals( name ) ) {
320 setRequestAttribute( name,multi.getIntParameters(name) );
321 }
322 else {
323 // 5.6.5.2 (2013/06/21) チェãƒ?‚¯ボックス配å?の値取得をè€??した、MultipartRequest のパラメータ値取å¾?
324 String val = getParamVal( name,multi );
325 // String val = multi.getParameter(name);
326 // // "KEY","VALUE","ISFILE" のé ?�«ãƒ??タを作æ?しますã?
327 // if( "0".equals(val) ){ // 5.4.4.2 チェãƒ?‚¯ボックス配å?対応ã?
328 // String[] vals = multi.getParameters(name);
329 // if( vals != null && vals.length > 1 ) {
330 // for( int j=0; j<vals.length; j++ ) {
331 // if( "1".equals( vals[j] ) ) {
332 // val = "1";
333 // break;
334 // }
335 // }
336 // }
337 // }
338
339 values = new String[] { name, val, "0" };
340 table.addColumnValues( values );
341 setRequestAttribute( name,val );
342 }
343 }
344
345 // 5.3.2.0 (2011/02/01) パラメーター名を保存するã?
346 String[] names = new String[ files.length + params.length ];
347 System.arraycopy( files, 0, names, 0, files.length );
348 System.arraycopy( params, 0, names, files.length, params.length );
349 setParameterNames( names );
350
351 return table ;
352 }
353
354 /**
355 * ファイルアãƒ??ロードã?実行結果ã‚?横持ã? DBTableModel に記述しますã?
356 *
357 * こã?処ç�??、columns 属æ?を設定したå?合ã?みとしますã?
358 *
359 * DBTableModel作æ?時に、指定ã?カラãƒ??"_01"??_99"の添え字をレコードとして作æ?しますã?
360 * 現状はã€?KEY","VALUE","ISFILE" のカラãƒ?�«、データを縦持ちで作æ?してã�?�¾すã?
361 * これをã?横持で作æ?しますが、カラãƒ??末尾にã€?_01"??_99" までの添え字を
362 * 持つ場合ã?、これをレコードと認識させますã?
363 * <del>添え字以外ã?、固定å?になるã?で、DBTableModel に含めることはできませんã€?/del>
364 * 添え字がなã�??合ã?、カラãƒ?� け作æ?されますã?カラãƒ?��と同じリクエストがあればã€?
365 * すべてのレコードに同じ値がセãƒ?ƒˆされますã?
366 *
367 * @og.rev 5.6.5.2 (2013/06/21) 新規作æ?
368 * @og.rev 5.6.6.1 (2013/07/12) 添え字がなã�??合ã?処ç�??見直ã�?
369 *
370 * @param multi MultipartRequestオブジェクãƒ?
371 *
372 * @return ãƒ??ブルモãƒ?ƒ«
373 */
374 private DBTableModel makeDBTableFromClms( final MultipartRequest multi ) {
375
376 DBTableModel table = DBTableModelUtil.newDBTable();
377
378 String[] clmNames = columns.split( "," );
379
380 table.init( clmNames.length );
381
382 // 値配å??ˆ1行å???
383 String[] rowVal = new String[clmNames.length];
384
385 for( int i=0; i<clmNames.length; i++ ) {
386 String clm = clmNames[i] ;
387 DBColumn dbColumn = getDBColumn( clm );
388 table.setDBColumn( i,dbColumn );
389
390 // 先に、カラãƒ?��とä¸??するパラメータをå?期å?としてセãƒ?ƒˆしておきますã?
391 String val = getParamVal( clm,multi );
392
393 // 5.6.6.1 (2013/07/12) ファイル名も同様に、あれã?初期値セãƒ?ƒˆしておきますã?
394 if( val == null ) {
395 val = multi.getFilesystemName( clm );
396 }
397 if( val == null ) {
398 val = multi.getOriginalFileName( clm ); // 注意:取得ã?ã€??信å�?
399 }
400 rowVal[i] = ( val == null ) ? "" : val ;
401 }
402
403 String[] files = multi.getFilenames(); // 3.6.0.0 (2004/09/17)
404 for( int i=0; i<files.length; i++ ) {
405 String name = files[i];
406 File fin = multi.getFile(name);
407 if( fin != null ) {
408 // 5.6.6.1 (2013/07/12) 添え字がなã�??合ã?処ç�??見直しã?先にレコードを作æ?
409 String[] values = new String[clmNames.length];
410 System.arraycopy( rowVal,0,values,0,values.length ); // 行にセãƒ?ƒˆするに当たりã?rowVal ã‚?values にコピã?しておくã€?
411
412 // ファイル名を Attribute で使えるようにセãƒ?ƒˆしておくã€?
413 String fval = multi.getFilesystemName(name);
414 setRequestAttribute( name,fval );
415
416 String orgName = name + "_ORG" ;
417 String oval = multi.getOriginalFileName(name); // 注意:取得ã?ã€??信å�?
418 setRequestAttribute( orgName,oval );
419
420 // ファイルのキーをå?に、添え字を検索しますã?
421 int adrs = name.lastIndexOf( '_' ); // 添え字ã?ã€?_' で区åˆ?‚‰れますã?
422 // 5.6.6.1 (2013/07/12) 添え字がなã�??合ã?処ç�??見直しã?後続å?ç�?‚’行うã€?
423 // if( adrs < 0 ) { continue; } // 添え字がなã�?
424 if( adrs > 0 ) {
425 String fnm = name.substring( 0,adrs ); // ファイルå�?åˆ?‰²å¾?
426 String sub = name.substring( adrs ); // 添えå?アンãƒ??バã?含ã‚?
427
428 // String[] values = new String[clmNames.length];
429 // System.arraycopy( rowVal,0,values,0,values.length ); // 行にセãƒ?ƒˆするに当たりã?rowVal ã‚?values にコピã?しておくã€?
430
431 // カラãƒ?��で検索しながら、レコード単位になるよã�?�«セãƒ?ƒˆしてã�?��ますã?
432 for( int j=0; j<clmNames.length; j++ ) {
433 String clm = clmNames[j] ;
434 String nm = null;
435 String val = null;
436
437 if( fnm.equalsIgnoreCase( clm ) ) { // ファイル名カラãƒ?_NEWファイル名も、この値にすでに変わってã�?‚‹??
438 // nm = name;
439 // val = multi.getFilesystemName( nm );
440 val = fval;
441 }
442 else if( ( fnm + "_ORG" ).equalsIgnoreCase( clm ) ) { // å…?ƒ•ァイル名カラãƒ?
443 // nm = name + "_ORG" ;
444 // val = multi.getOriginalFileName( name ); // 注意:取得ã?ã€??信å�?
445 val = oval;
446 }
447 else if( ( fnm + "_NEW" ).equalsIgnoreCase( clm ) ) { // 新ファイル名カラãƒ?
448 nm = name + "_NEW" ;
449 val = multi.getParameter( nm );
450 }
451 else {
452 nm = clmNames[j] + sub; // sub は、アンãƒ??バã?含ã‚?·»えå?
453 // 5.6.5.2 (2013/06/21) チェãƒ?‚¯ボックス配å?の値取得をè€??した、MultipartRequest のパラメータ値取å¾?
454 val = getParamVal( nm,multi );
455 }
456 if( val != null ) { values[j] = val ; } // val ã�?null でなã�?�¨きã?みセãƒ?ƒˆしますã?
457 // setRequestAttribute( nm,val );
458 }
459 }
460 table.addColumnValues( values );
461 }
462 }
463
464 // Attribute で使えるようにセãƒ?ƒˆしておくã€?
465 setRequestAttribute( "directory",fileURL );
466
467 // Attribute で使えるようにセãƒ?ƒˆしておくã€?
468 String[] params = multi.getParameterNames();
469 for( int i=0; i<params.length; i++ ) {
470 String name = params[i];
471 // 5.3.2.0 (2011/02/01) チェãƒ?‚¯行ã?パラメーターはint配å?側に変換
472 if ( HybsSystem.ROW_SEL_KEY.equals( name ) ) {
473 setRequestAttribute( name,multi.getIntParameters(name) );
474 }
475 else {
476 // 5.6.5.2 (2013/06/21) チェãƒ?‚¯ボックス配å?の値取得をè€??した、MultipartRequest のパラメータ値取å¾?
477 String val = getParamVal( name,multi );
478 setRequestAttribute( name,val );
479 }
480 }
481
482 // 5.3.2.0 (2011/02/01) パラメーター名を保存するã?
483 String[] names = new String[ files.length + params.length ];
484 System.arraycopy( files, 0, names, 0, files.length );
485 System.arraycopy( params, 0, names, files.length, params.length );
486 setParameterNames( names );
487
488 return table ;
489 }
490
491 /**
492 * チェãƒ?‚¯ボックス配å?の値取得をè€??した、MultipartRequest のパラメータ値取å¾?
493 *
494 * ここでは、ã?MultipartRequest のパラメータ値を取得しますã?
495 * 値の取得で、チェãƒ?‚¯ボックス配å?の場合ã?、取得したå?がã?"0" の場合ã?み
496 * 配å?でパラメータを取得し直しã?"1" がなã�?�‹どã�?�‹再度検索しますã?
497 * チェãƒ?‚¯ボックスでは、チェãƒ?‚¯時ã? "1" と、チェãƒ?‚¯されなかったå?合ã?ã€?
498 * hidden の "0" の両方の値がé?列としてリクエストされるケースがある為ですã?
499 *
500 * @og.rev 5.6.5.2 (2013/06/21) 新規作æ?
501 *
502 * @param key MultipartRequest のパラメータ取得ã?ためのキー
503 * @param multi MultipartRequestオブジェクãƒ?
504 *
505 * @return チェãƒ?‚¯ボックス配å?をè?慮したパラメータ値
506 */
507 private String getParamVal( final String key , final MultipartRequest multi ) {
508 String val = multi.getParameter( key );
509
510 if( "0".equals(val) ){ // 5.4.4.2 チェãƒ?‚¯ボックス配å?対応ã?
511 String[] vals = multi.getParameters( key );
512 if( vals != null && vals.length > 1 ) {
513 for( int j=0; j<vals.length; j++ ) {
514 if( "1".equals( vals[j] ) ) {
515 val = "1";
516 break;
517 }
518 }
519 }
520 }
521 return val ;
522 }
523
524 /**
525 * 【TAG】ファイルをアãƒ??ロードするディレクトリを指定しまã�?
526 * (初期値:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
527 *
528 * @og.tag
529 * こã?属æ?でæŒ?®šされるãƒ?‚£レクトリに、アãƒ??ロードされたファイルをセーブしますã?
530 * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
531 * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
532 * fileURL = "{@USER.ID}" とæŒ?®šすると、FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下にã€?
533 * さらに、各個人ID別のフォルãƒ?‚’作æ?して、そこにセーブしますã?
534 * (初期値:シスãƒ?ƒ 定数のFILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
535 *
536 * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソãƒ?ƒ‰の利用
537 * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šされたãƒ?‚£レクトリ名ã?æœ?¾Œが"\"or"/"で終わってã�?�ªã�??合にã€?/"を付加するã€?
538 *
539 * @param url ファイルURL
540 * @see org.opengion.hayabusa.common.SystemData#FILE_URL
541 */
542 public void setFileURL( final String url ) {
543 String furl = nval( getRequestParameter( url ),null );
544 if( furl != null ) {
545 char ch = furl.charAt( furl.length()-1 );
546 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
547 fileURL = StringUtil.urlAppend( fileURL,furl );
548 }
549 }
550
551 /**
552 * 【TAG】最大転送サイズ(Byte)を指定しまã�?初期値:10485760)ã€?
553 *
554 * @og.tag
555 * æœ?¤§転送サイズを指定しますã?初期値はã€?0*1024*1024 = 10MB ですã?
556 * æŒ?®šã?、Byte 単位でæŒ?®šしますã?
557 * 0,またã?マイナスを指定することで、制限チェãƒ?‚¯を外す?ˆ=無制限)事ができますã?
558 *
559 * @og.rev 3.0.1.1 (2003/03/06) maxPostSize の設定バグ修正ã€?
560 * @og.rev 5.6.5.3 (2013/06/28) コメント追åŠ?¼?,またã?マイナスで無制限ï¼?
561 *
562 * @param maxPS æœ?¤§転送サイズ
563 */
564 public void setMaxPostSize( final String maxPS ) {
565 maxPostSize = nval( getRequestParameter( maxPS ),maxPostSize );
566 }
567
568 /**
569 * 【TAGã€?通常使ã�?�¾せん)sessionからæ‰?¾—すã‚?DBTableModelオブジェクトã? IDã€?
570 *
571 * @og.tag
572 * 初期値は、HybsSystem.TBL_MDL_KEY ですã?
573 *
574 * @og.rev 3.5.2.0 (2003/10/20) nvalメソãƒ?ƒ‰を適用するように変更ã€?
575 *
576 * @param id sessionに登録する時ã? ID
577 */
578 public void setTableId( final String id ) {
579 tableId = nval( getRequestParameter( id ),tableId );
580 }
581
582 /**
583 * 【TAGã€?通常使ã�?�¾せん)ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしますã?
584 *
585 * @og.tag
586 * ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしますã?
587 * これは、è¤?•°同時にアãƒ??ロードファイル名を変更する時に使用できませんã€?
588 * 通常、アãƒ??ロードされたファイル名をæŒ?®šするå?合ã?アãƒ??ロードするinput タグの
589 * name 属æ?にæŒ?®šする名称 ??"_NEW" とã�?�†リクエストå?を同時に送信すればã€?
590 * å†?ƒ¨çš?�«関連付けて、ファイル名を更新しますã?
591 * そã?場合ã?クライアントより指定したファイル名ã?、name属æ???_ORG" とã�?�†
592 * リクエストå?として取得することが可能になりますã?
593 * name属æ? には、最終的に設定されたファイル名がセãƒ?ƒˆされてã�?�¾すã?
594 * ã�?�šれã?値もã?{@name属æ???_ORG"} ã‚??{@name属æ???_NEW"}としてã€?
595 * アãƒ??ロードã?オリジナルと変更後ã?ファイル名を取得することがå?来ますã?
596 *
597 * @og.rev 3.5.4.2 (2003/12/15) ファイル名をæŒ?®šできるようにしますã?
598 *
599 * @param filename ファイルå�?
600 */
601 public void setFilename( final String filename ) {
602 this.filename = nval( getRequestParameter( filename ),this.filename );
603 }
604
605 /**
606 * 【TAG】DBTableModel作æ?時に、指定ã?カラãƒ??"_01"??_99"の添え字をレコードとして作æ?しますã?
607 *
608 * @og.tag
609 * 現状はã€?KEY","VALUE","ISFILE" のカラãƒ?�«、データを縦持ちで作æ?してã�?�¾すã?
610 * これをã?横持で作æ?しますが、カラãƒ??末尾にã€?_01"??_99" までの添え字を
611 * 持つ場合ã?、これをレコードと認識させますã?
612 * アンãƒ??バã?がなã�??合ã?、カラãƒ?� け作æ?されますã?カラãƒ?��と同じリクエストがあればã€?
613 * すべてのレコードに同じ値がセãƒ?ƒˆされますã?
614 * こã?処ç�??、columns 属æ?を設定したå?合ã?みとしますã?
615 *
616 * @og.rev 5.6.5.2 (2013/06/21) 新規作æ?
617 *
618 * @param clms DBTableModel作æ?時ã?カラãƒ??(カンマ区åˆ?‚Šæ–??
619 */
620 public void setColumns( final String clms ) {
621 columns = nval( getRequestParameter( clms ),columns );
622 }
623
624 /**
625 * 【TAG】ファイルアãƒ??ロード時に、すでに同名のファイルが存在した場合に、バãƒ?‚¯アãƒ??処ç�?renameTo)するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
626 *
627 * @og.tag
628 * ファイルアãƒ??ロード時に、アãƒ??ロードå?に、同名ã?ファイルが存在した場合ã?、既存機è?は、そのまま
629 * 置き換えてã�?�¾したがã?簡易バージョンアãƒ??機è?として、useBackup="true" を指定すると、既存ã?ファイルã‚?
630 * リネã?ãƒ?�—て、バãƒ?‚¯アãƒ??ファイルを作æ?しますã?
631 * バックアãƒ??ファイルは、アãƒ??ロードフォルãƒ?‚’基準として、_backup/ファイルå�?拡張子_処ç�?™‚刻のlong値.拡張å?になりますã?
632 * オリジナルのファイル名(拡張子付)を残したままã€?_処ç�?™‚刻のlong値" を追åŠ?�—、さらに、オリジナルの拡張子を追åŠ?�—ますã?
633 * バックアãƒ??ファイルの形式ã?æŒ?®šできませんã€?
634 *
635 * 初期値は、互換性を持たせるためã?false ですã?
636 *
637 * @og.rev 5.6.5.3 (2013/06/28) 新規作æ?
638 *
639 * @param flag ファイルアãƒ??ロード時に、バãƒ?‚¯アãƒ??処ç�?renameTo)するかどã�?�‹[true/false]を指å®?
640 */
641 public void setUseBackup( final String flag ) {
642 useBackup = nval( getRequestParameter( flag ),useBackup );
643 }
644
645 /**
646 * タグの名称をã?返しますã?
647 * 自åˆ??身のクラス名よりã?自動的に取り出せなã�?�Ÿめã?こã?メソãƒ?ƒ‰をオーバã?ライドしますã?
648 *
649 * @og.rev 4.0.0.0 (2005/01/31) 新規追åŠ?
650 *
651 * @return タグの名称
652 */
653 @Override
654 protected String getTagName() {
655 return "upload" ;
656 }
657
658 /**
659 * こã?オブジェクトã?æ–?—å?表現を返しますã?
660 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
661 *
662 * @return こã?クラスのæ–?—å?表現
663 */
664 @Override
665 public String toString() {
666 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
667 .println( "VERSION" ,VERSION )
668 .println( "names" ,names )
669 .println( "ENCODE" ,ENCODE )
670 .println( "fileURL" ,fileURL )
671 .println( "filename" ,filename )
672 .println( "maxPostSize" ,maxPostSize)
673 .println( "tableId" ,tableId )
674 .println( "columns" ,columns ) // 5.6.5.2 (2013/06/21)
675 .println( "useBackup" ,useBackup ) // 5.6.5.3 (2013/06/28)
676 .println( "Other..." ,getAttributes().getAttribute() )
677 .fixForm().toString() ;
678 }
679 }