首先,zul檔的撰寫如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
<?page title="new page title" contentType="text/html;charset=UTF-8"?> <zk> <window title="Upload Testing" border="normal" apply="javck.controller.UploadComposer"> <!-- 註一 --> <button label="Upload" upload="true,maxsize=1024" id="btn_upload"/> <menubar> <menu label="File"> <menupopup> <!-- 註二 --> <menuitem label="Upload" upload="true,maxsize=-1" id="mi_upload"/> <menuseparator /> <menuitem label="Open" /> </menupopup> </menu> <menuitem label="About" /> </menubar> <div id="div_fileList"> <vbox id="vbox_fileList"> </vbox> </div> </window> </zk>
|
註一:
true表示使用預設的client
hander來處理上傳,maxsize=1024表示設定上傳檔案最大不得超過1024,單位是KB
註二:
maxsize=-1
,表示不限定上傳檔案大小,另外說明的是 ZK5
的fileupload機制有改寫過,大多數的元件都能夠透過upload這個屬性來提供檔案上傳的功能
接下來,撰寫composer程
式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
package javck.controller; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import org.zkoss.util.media.Media; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.UploadEvent; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Button; import org.zkoss.zul.Div; import org.zkoss.zul.Hbox; import org.zkoss.zul.Label; import org.zkoss.zul.Menuitem; import org.zkoss.zul.Toolbarbutton; import org.zkoss.zul.Vbox; public class UploadComposer extends GenericForwardComposer { private Button btn_upload; private Menuitem mi_upload; private Div div_fileList; private Vbox vbox_fileList; private String uploadFolderPath = "C:/Tomcat 6/webapps/ZK5Test/upload/"; private String downloadUrl = "http://localhost/ZK5Test/upload/"; @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); } public void onUpload$mi_upload(UploadEvent evt){ System.out.println("MenuItem Upload...."); Media[] medias = evt.getMedias(); upload(medias); } public void onUpload$btn_upload(UploadEvent evt) { System.out.println("Button Upload...."); Media[] medias = evt.getMedias(); upload(medias); } private void upload(Media[] medias){ for(Media obj : medias){ //用來記錄檔案的大小 int size = 0; //檔案的IO處理,將檔案從media透過inputstream 和outputstream來做傳輸 try { FileOutputStream fos = new FileOutputStream(new File(uploadFolderPath + obj.getName())); InputStream is = obj.getStreamData(); byte[] buffer = new byte[1024]; int pointer = 0; while((pointer = is.read(buffer))!= -1){ size += pointer; fos.write(buffer, 0, pointer); } if(is != null){ is.close(); } if(fos != null){ fos.flush(); fos.close(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Hbox hb = new Hbox(); hb.setParent(vbox_fileList); Toolbarbutton tbb = new Toolbarbutton(); tbb.setLabel(obj.getName()); tbb.setHref(downloadUrl + obj.getName()); tbb.setParent(hb); Label lb = new Label(); lb.setValue(size/1024 + " KB"); lb.setParent(hb); } } }
|
透過以上簡單的程式碼,就能做到如下的效果,給大家做個參考囉