ZK 文件上传,分文本文件与其他类型的文件

本文介绍如何在ZK框架中处理文件上传,特别是区分文本文件和其他类型文件的方法。通过ZUL页面实现全功能的文件上传组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种 全部在 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>


第二种,调用java文件

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;

	}	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值