Wicketで簡単なアップローダを作ってみた。単純にファイルをアップロードされたファイルを保存するだけの簡単な物にした。いつかWicket-jaのwikiにいろいろ書き込むためにもブログで練習しておかないとな
まずはHTML(UploadPage.html)、単純にエラーメッセージ表示用のfeedbackとform置いてファイル選択とサブミットボタンをフォームにのせただけ
<html> <head> <title>アップローダ</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <span wicket:id="feedback"></span> <form wicket:id="uploadForm"> アップロードファイル: <input type="file" value="" wicket:id="uploadField" /> <input type="submit" value="送信" wicket:id="uploadButton" /> </form> </body> </html>
次に上のHTMLに対応するJavaのソース(UploadPage.java)
package d_kami.upload; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.upload.FileUploadField; import org.apache.wicket.markup.html.form.upload.FileUpload; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.util.lang.Bytes; import java.io.File; import java.io.IOException; public class UploadPage extends WebPage{ public UploadPage(){ FeedbackPanel feedback = new FeedbackPanel("feedback"); Form form = new Form("uploadForm"); final FileUploadField uploadField = new FileUploadField("uploadField"); //ファイルのアップロードに必要な設定 form.setMultiPart(true); //アップロードできるのは10キロバイトまで form.setMaxSize(Bytes.kilobytes(10)); Button submitButton = new Button("uploadButton"){ @Override public void onSubmit(){ FileUpload upload = uploadField.getFileUpload(); //ローカルファイルが無かった場合などは何もしない if(upload == null) return; //アップロードしたファイルを置くディレクトリのパスを決める WebApplication application = (WebApplication)getApplication(); String uploadPath = application.getServletContext().getRealPath("upload"); File uploadDir = new File(uploadPath); //ディレクトリが無ければ作成 if(!uploadDir.exists()) uploadDir.mkdir(); //アップロードしたファイルの名前を取得 String fileName = upload.getClientFileName(); File uploadFile = new File(uploadDir, fileName); try{ //アップロードされたクライアントのファイルをサーバーのファイルに書き込む upload.writeTo(uploadFile); }catch(IOException e){ //例外がでたら、FeedbackPanelにエラーメッセージを表示する this.error(e.getMessage()); } } }; add(feedback); form.add(uploadField); form.add(submitButton); add(form); } }
最後にApplicationクラス。
package d_kami.upload; import org.apache.wicket.protocol.http.WebApplication; public class UploadApplication extends WebApplication{ @Override public Class getHomePage(){ return UploadPage.class; } }
一応フィルタマッピングも
<filter> <filter-name>UploadApplication</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>d_kami.upload.UploadApplication</param-value> </init-param> </filter> <filter-mapping> <filter-name>UploadApplication</filter-name> <url-pattern>/upload/*</url-pattern> </filter-mapping>