前回作った物はただファイルをアップロードするだけだったので、今度はアップロードされたファイルの一覧を表示する機能を付けた。ファイルの並び順が日付順になってないのと、ダウンロード機能、排他制御未実装
UploadPage.html
<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> <table style="width:100%"> <tr> <td>ファイル名</td> <td style="text-align:right;padding-right:10px">ファイルサイズ</td> <td>更新日</td> </tr> <tr wicket:id="uploadList"> <td wicket:id="fileName" style="width:100px"></td> <td wicket:id="fileSize" style="text-align:right;padding-right:10px"></td> <td wicket:id="uploadTime"></td> </tr> </table> </body> </html>
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.basic.Label; 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.list.ListView; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.util.lang.Bytes; import java.util.Arrays; import java.util.Date; import java.text.SimpleDateFormat; 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)); final File uploadDir = getDirectory("upload"); Button submitButton = new Button("uploadButton"){ @Override public void onSubmit(){ FileUpload upload = uploadField.getFileUpload(); if(upload == null){ /* アップロードするファイルが見つからなければエラーメッセージ表示 して後は何もしない */ error("アップロードするファイルが見つかりません"); return; } //アップロードしたファイルの名前を取得 String fileName = upload.getClientFileName(); File uploadFile = new File(uploadDir, fileName); try{ //アップロードされたクライアントのファイルをサーバーのファイルに書き込む upload.writeTo(uploadFile); }catch(IOException e){ //例外がでたら、FeedbackPanelにエラーメッセージを表示する this.error(e.getMessage()); } } }; //アップロードされたファイルの一覧を返すモデル IModel uploadListModel = new LoadableDetachableModel(){ @Override protected Object load() { //アップロードされたファイルのリスト(一覧)を返す return Arrays.asList(uploadDir.listFiles()); } }; //アップロードされたファイルの一覧を表示するListView ListView listView = new ListView("uploadList", uploadListModel){ @Override public void populateItem(ListItem listItem){ File file = (File)listItem.getModelObject(); listItem.add(new Label("fileName", file.getName())); listItem.add(new Label("fileSize", file.length() +"B")); Date date = new Date(file.lastModified()); SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm"); listItem.add(new Label("uploadTime", format.format(date))); } }; add(feedback); form.add(uploadField); form.add(submitButton); add(form); add(listView); } private File getDirectory(String dirName){ WebApplication application = (WebApplication)getApplication(); String uploadPath = application.getServletContext().getRealPath(dirName); File dir = new File(uploadPath); if(!dir.exists()) dir.mkdir(); return dir; } }