@Upload
@Uploadは0.4で入る新機能で、ファイルアップロードを受け取るアノテーションです。
ただし、@Uploadで受け取るときのクラスはorg.t2framework.contexts.Uploadクラスとして決まっているので、
型だけで省略可能です。
こんな感じに型だけでいけます。
@POST @ActionParam public Navigation upload(UploadFile file, HttpServletRequest request) { System.out.println("file:" + file.getName()); System.out.println("size:" + file.getSize()); System.out.println("contentType:" + file.getContentType()); request.setAttribute("fileUploadResult", file.getName() + " is uploaded."); return Forward.to("/jsp/upload.jsp"); }
@Uploadは画面側にあるname属性で厳密にこのファイルだけ受け取ると
限定する場合に使います。以下の例では、nameがbbbというファイルだけ受け取ります。
@POST @ActionParam public Navigation upload3(@Upload("bbb") UploadFile file, HttpServletRequest request) { request.setAttribute("fileUploadResult", file.getName() + " is uploaded."); return Forward.to("/jsp/upload.jsp"); }
ちなみに複数受け取る場合はどうするのでしょうか?
その場合は型を配列にします。
@POST @ActionParam public Navigation upload2(UploadFile[] files, HttpServletRequest request) { StringBuilder builder = new StringBuilder(); for (UploadFile file : files) { System.out.println("file:" + file.getName()); System.out.println("size:" + file.getSize()); System.out.println("contentType:" + file.getContentType()); builder.append(file.getName()); builder.append(", "); } builder.setLength(builder.length() - 2); request.setAttribute("fileUploadResult", builder.toString() + " is uploaded."); return Forward.to("/jsp/upload.jsp"); }