第一种 全部在 ZUL 页面实现
<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
<window title="" border="normal">
<button label="upload">
<attribute name="onClick">
<![CDATA[
import org.zkoss.zk.ui.util.Configuration;
import org.zkoss.io.Files;
import java.io.Reader;
import java.io.File;
Desktop desktop = self.getDesktop();
org.zkoss.zk.ui.util.Configuration conf = desktop.getWebApp().getConfiguration();
conf.setMaxUploadSize(1024);
//解决中文问题,如果上传的文件中有中文
conf.setUploadCharset("utf-8");
//如果文本文件的话,返回的实际是AMedia类型
Object media = Fileupload.get();
//多文件
//Object[] mediaArray = Fileupload.get(5);
if(media!=null){
String fileName = media.getName();
if(fileName.endsWith(".txt")){
// 上傳text文件
Reader r = media.getReaderData();
File f = new File("F:\\"+fileName);
if(!f.exists()){
f.createNewFile();
}
//Files类是由ZK提供的
Files.copy(f,r,null);
Files.close(r);
alert("file created");
}else{
long intRet = 0;
java.io.FileOutputStream os = new java.io.FileOutputStream("F:\\"+fileName);
int bytesRead = 0;
byte[] buffer = new byte[1024];
java.io.InputStream ins = media.getStreamData();
while ((bytesRead = ins.read(buffer, 0, 1024)) != -1) {
os.write(buffer, 0, bytesRead);
intRet += bytesRead;
}
os.flush();
os.close();
ins.close();
alert("file created success");
}
}
]]>
</attribute>
</button>
<vbox id="file">
</vbox>
</window>
</zk>
zul 页面
<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
<window id="winImport" border="normal" use="com.mytest.Import">
<button width="80px" label="Upload" id="btnUpload" upload="true">
<attribute name="onUpload">
{
org.zkoss.util.media.Media media = event.getMedia();
winImport.uploadFileMedia(media);
} </attribute></button> </window></zk>
java文件
package com.mytest;
import org.zkoss.util.media.Media;
import org.zkoss.zul.Messagebox;
import org.zkoss.io.Files;
import com.sae.zksys.zk.util.MyMessagebox;
import com.sae.zksys.zk.util.MyWindow;
import java.io.File;
import java.io.Reader;
import java.net.MalformedURLException;
import jcifs.smb.SmbException;
public class Import extends MyWindow{
public void uploadFileMedia(Object fileMedia) throws MalformedURLException, SmbException {
if (fileMedia != null) {
Media media = (Media) fileMedia;
String fileName = media.getName();
String path = System.getProperty("catalina.home");
String filePath=path+ "/TempFiles"; //文件保存路徑
java.io.File file = new java.io.File(filePath);
if (!file.exists()){
file.mkdir();
}
filePath=filePath+"/" + fileName;
if(!fileName.endsWith(".xls")){
Messagebox.show("只能上傳.xls文件!","ERROR",Messagebox.OK, Messagebox.ERROR);
return;
}
java.io.File filex = new java.io.File(filePath);
if(filex.exists()){
MyMessagebox.warn("Failed! " + fileName + " 該文件已經存在!");
return ;
}
long size = uploadFile(filePath, media);
MyMessagebox.info("文件上傳成功!");
if (size > 0) { // upload success
file=new File(filePath);
long len=file.length();
//file.delete(); //文件刪除
int ret=XlsUtil4Spreadsheet.insertRow(filePath,fileName,len);
MyMessagebox.info(String.valueOf(ret));
if(ret==0){
Messagebox.show("保存日誌文件出錯!","ERROR",Messagebox.OK, Messagebox.ERROR);
return ;
}
}
}
}
public static long uploadFile(String filePath, Media media) {
long intRet = 0;
try {
if (media.getContentType().toLowerCase().startsWith("text")) {
Reader r = media.getReaderData();
File f = new File(filePath);
if (!f.exists()) {
f.createNewFile();
}
Files.copy(f, r, null);
Files.close(r);
intRet = f.length();
} else {
java.io.FileOutputStream os = new java.io.FileOutputStream(
filePath);
int bytesRead = 0;
byte[] buffer = new byte[1024];
java.io.InputStream ins = media.getStreamData();
while ((bytesRead = ins.read(buffer, 0, 1024)) != -1) {
os.write(buffer, 0, bytesRead);
intRet += bytesRead;
}
os.flush();
os.close();
ins.close();
}
} catch (Exception e) {
String msg = "Failed to upload " + filePath;
throw new RuntimeException(msg);
}
return intRet;
}
}