`
senhui19
  • 浏览: 47190 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

开放JSP版KindEditor的附件JAR包源码

阅读更多

       前段时间我在论坛上发布了一篇名为JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能) 得到了大家的积极响应,不过令我觉得有点遗憾的是,有很多人都不是真的讨论技术问题,而是向我索取源码,说实在的自已的劳动成果就这样白白奉献出来,觉得有点对不起自己了,要知道我们国内的技术员都是没有金钱后盾啊。唉,最近都太忙了就没有怎么太在意这件事,今晚刚好有空过来看看。看了那么多人留下的印记后,觉得自己也应该要无私一下才是吧,咱老毛说的对:要像雷锋同志学习,呵呵…… 其实在上面我已经说过了,这个JAR里面的功能我只是把官网的JSP代码改编而已,废话就先不多说了,下面直接上码吧,可要接稳了哦

 

    1.图片上传的类

 

package com.elkan.kindeditor.upload;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.elkan.utils.ImageUtil;

/**
 * 实现KindEditor图片上传的Servlet
 * 
 * @author SENHUI
 * 
 * @since 2011/03/21 20:20:23
 */
public class UploadImage extends HttpServlet {

	private static final long serialVersionUID = 5121794650920770832L;
	// 上传图片的最大宽度
	protected int MAX_WIDTH = -1;
	// 上传图片的最大高度
	protected int MAX_HEIGHT = -1;
	// 上传图片的大小
	protected long MAX_SIZE = 1000000;
	// 定义允许上传的图片的扩展名
	protected String[] IMAGETYPES = new String[] { "gif", "jpg", "jpeg", "png", "bmp" };
	// 定义上传图片保存目录路径
	protected String UPLOAD_PATH = "";	
	// 上传图片设置信息   
	protected String id = "";  
	// 上传图片的TITLE属性值
	protected String imgTitle = ""; 
	
	protected int imgWidth = -1;   
	
	protected int imgHeight = -1;   
	
	protected String imgBorder = "";   
	
	protected String resizeImg = "";
	
	protected boolean isFlag = false;
	
	protected String tempTitle = "";

	@SuppressWarnings("deprecation")
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		String savePath = this.getInitParameter("UPLOAD_PATH");
		if (savePath == null || savePath.isEmpty()) {
			out.println(alertMsg("你还没设置上传图片保存的目录路径!"));
			return;
		}
		//判断是否设置了上传图片的大小
		if(this.getInitParameter("MAX_SIZE") != null){
			MAX_SIZE = Integer.parseInt(this.getInitParameter("MAX_SIZE"));
		}
		//判断是否设置了上传图片的类型
		if(this.getInitParameter("IMAGETYPES") != null){
			IMAGETYPES = toArray(this.getInitParameter("IMAGETYPES"));
		}
		// 图片保存目录路径
		String uploadPath = new StringBuffer(request.getSession().getServletContext().getRealPath("/")).append(savePath).toString();
		
		// 图片保存目录URL
		String saveUrl = new StringBuffer(request.getContextPath()).append("/").append(savePath).toString();
		
		// 检查上传图片是否存在
		if (!ServletFileUpload.isMultipartContent(request)) {
			out.println(alertMsg("请选择你要上传的图片!"));
			return;
		}
		
		// 检查目录
		File uploadDir = new File(uploadPath);
		if (!uploadDir.isDirectory()) {
			out.println(alertMsg("上传图片保存的目录不存在。"));
			return;
		}
		
		// 检查目录写权限
		if (!uploadDir.canWrite()) {
			out.println(alertMsg("上传图片保存的目录没有写权限。"));
			return;
		}
		
		// 准备上传图片
		FileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setHeaderEncoding("UTF-8");
		List<?> items = null;
		String temp = null;
		try {
			items = upload.parseRequest(request);			
			Iterator<?> itr = items.iterator();
			while (itr.hasNext()) {
				
				FileItem item = (FileItem) itr.next();
				 // 上传图片的原文件名   
		        String fileName = item.getName(); 
		        temp = (String) item.getName();
		        if(temp != null && !isFlag){
		        	temp = temp.substring(temp.lastIndexOf("\\")+1);
		        	tempTitle = temp;
		        	isFlag = true;
		        }
		         // KindEditor编辑器的ID  
		        if(((String)item.getFieldName()).equals("id")){   
		            id = item.getString(); 
		        }  
		       
		        // 上传图片的重新提示
		        if(((String)item.getFieldName()).equals("imgTitle")){   
		            imgTitle = item.getString(); 
		            if(imgTitle != null){
		            	imgTitle = new String(imgTitle.getBytes("ISO8859-1"),"UTF-8");
		            }
		        } 
		        // 设置图片的宽度
		        if(((String)item.getFieldName()).equals("imgWidth")){   
		           String imgWidth = item.getString();   
		           if(imgWidth != null && !imgWidth.isEmpty()){
		        	   this.imgWidth = Integer.parseInt(imgWidth);
		           }
		        }  
		        // 设置图片的高度
		        if(((String)item.getFieldName()).equals("imgHeight")){   
		           String imgHeight = item.getString();   
		           if(imgHeight != null && !imgHeight.isEmpty()){
		        	   this.imgHeight = Integer.parseInt(imgHeight);
		           }
		        }
		        // 设置图片的边框
		        if(((String)item.getFieldName()).equals("imgBorder")){   
		            imgBorder = item.getString();  
		        } 
		        
				long fileSize = item.getSize();
				if (!item.isFormField()) {						
					// 检查文件大小
					if (fileSize > MAX_SIZE) {
						out.println(alertMsg("上传文件大小超过限制。"));
						return;
					}
					
					// 检查扩展名
					String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
					if (!Arrays.<String> asList(IMAGETYPES).contains(fileExt)) {
						out.println(alertMsg("上传图片扩展名是不允许的扩展名。"));
						return;
					}
					// 根据时间创建文件夹
					SimpleDateFormat folderNameFormat = new SimpleDateFormat("yyyyMMdd");
					String realPath = uploadPath + folderNameFormat.format(new Date());
					File folder = new File(realPath);
					boolean flag = folder.exists();
					// 确认文件夹是否已经存在
					if(!flag){
						flag = folder.mkdir();
					}
					// 创建文件夹并上传图片
					if(flag){
						SimpleDateFormat fileNameFormat = new SimpleDateFormat("yyyyMMddHHmmss");					
						String newFileName = fileNameFormat.format(new Date()) + "_"+ new Random().nextInt(1000) + "." + fileExt;						
						File uploadedFile = new File(realPath, newFileName);						
						item.write(uploadedFile);
						resizeImg = uploadedFile.getPath();
						resizeImg = resizeImg.replaceAll("\\\\", "/");
						saveUrl += folderNameFormat.format(new Date()) + "/" + newFileName;						
					}else{
						System.out.println(" 文件夹创建失败,请确认磁盘没有写保护并且空件足够");
					}	
				}
			}
			
			// 判断是否设置图片的最大宽度与高度
			String max_width = this.getInitParameter("MAX_WIDTH");
			String max_height = this.getInitParameter("MAX_HEIGHT");
			if((max_width != null && !max_width.isEmpty())){
				MAX_WIDTH = Integer.parseInt(max_width);
			}
			if(max_height != null && !max_height.isEmpty()){
				MAX_HEIGHT = Integer.parseInt(max_height);
			}
			
			if(imgTitle == null || imgTitle.isEmpty()){
				imgTitle = tempTitle;
			}
			
			// 判断是否要压缩图片
			if(MAX_WIDTH != -1 || MAX_HEIGHT != -1) {
				// 压缩图片
				ImageUtil.resizeImg(resizeImg, resizeImg, MAX_WIDTH, MAX_HEIGHT);
				
				if(this.imgWidth > ImageUtil.ImgWidth){
					this.imgWidth = ImageUtil.ImgWidth;
				}
				
				if(this.imgHeight > ImageUtil.ImgHeight){
					this.imgHeight = ImageUtil.ImgHeight;
				}
				
				// 返回编辑器
				out.println(insertEditor(id, saveUrl, imgTitle, imgWidth, imgHeight, imgBorder));
			}else{
				// 返回编辑器
				out.println(insertEditor(id, saveUrl, imgTitle, imgWidth, imgHeight, imgBorder));
			}				
			
		} catch (FileUploadException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			out.flush();
			out.close();
			isFlag = false;
		}

	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

	/**
	 * 输出打印上传失败的JSON语句
	 * 
	 * @param message    失败信息
	 * 
	 * @return 页面上传失败的JSON语句
	 */
	public String alertMsg(String message) {
		StringBuffer sb = new StringBuffer("{\"error\":\"1\",\"message\":\"");
		sb.append(message).append("\"}");
		return sb.toString();
	}
	
	/**
	 * 输出插入图片至编辑器语句的脚本
	 * 
	 * @param id        编辑器ID
	 * 
	 * @param saveUrl   上传图片的浏览地址
	 * 
	 * @param imgTitle   图片的提示信息
	 * 
	 * @param imgWidth   设置图片的宽度
	 * 
	 * @param imgHeight  设置图片的宽度
	 * 
	 * @param imgBorder  设置图片的边框
	 * 
	 * @return 插入图片至编辑器的脚本语句
	 */
	public String insertEditor(String id, String saveUrl, String imgTitle, 
			int imgWidth, int imgHeight, String imgBorder){
		StringBuffer sb = new StringBuffer("<script type\"text/javascript\">");
		sb.append("parent.KE.plugin[\"image\"].insert(\"").append(id).append("\",\"");
		sb.append(saveUrl).append("\",\"").append(imgTitle).append("\",\"");
		sb.append(imgWidth).append("\",\"").append(imgHeight).append("\",\"");
		sb.append(imgBorder).append("\");");
		sb.append("</script>");
		return sb.toString();
	}
	
	/**
	 * 输出允许上传图片类型的数组
	 * 
	 * @param filesType 允许上传的图片类型
	 * 
	 * @return 允许上传图片类型
	 */
	public String[] toArray(String filesType){
		
		if(filesType == null){
			return null;
		}
			
		String[] types = filesType.split(",");
		String[] allowTypes = new String[types.length];
		int i = 0;
		for(String type : types){
			allowTypes[i] = type;
			i++;
		}
		
		return allowTypes;
	}
}

 

 

    2.上传图片管理类

 

package com.elkan.kindeditor.upload;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Hashtable;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UploadImageManager extends HttpServlet {

	private static final long serialVersionUID = -8359652838938248988L;
	// 定义允许上传的图片的扩展名
	protected String[] FILETYPES = new String[] { "gif", "jpg", "jpeg", "png", "bmp" };
	// 定义上传图片保存目录路径
	protected String UPLOAD_PATH = "";

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		String savePath = this.getInitParameter("UPLOAD_PATH");
		if (savePath == null || savePath.isEmpty()) {
			out.println(alertMsg("你还没设置读取上传图片保存的目录路径!"));
			return;
		}
		// 图片保存目录路径
		String rootPath = new StringBuffer(request.getSession().getServletContext().getRealPath("/")).append(savePath).toString();		
		// 图片保存目录URL
		String rootUrl = new StringBuffer(request.getContextPath()).append("/").append(savePath).toString();
		//根据path参数,设置各路径和URL
		String path = request.getParameter("path") != null ? request.getParameter("path") : "";
		String currentPath = rootPath + path;
		String currentUrl = rootUrl + path;
		String currentDirPath = path;
		String moveupDirPath = "";
		
		if (!"".equals(path)) {
			String str = currentDirPath.substring(0, currentDirPath.length() - 1);
			moveupDirPath = str.lastIndexOf("/") >= 0 ? str.substring(0, str.lastIndexOf("/") + 1) : "";
		}

		//排序形式,name or size or type
		String order = request.getParameter("order") != null ? request.getParameter("order").toLowerCase() : "name";

		//不允许使用..移动到上一级目录
		if (path.indexOf("..") >= 0) {
			out.println(alertMsg("不允许使用移动到上一级目录"));
			return;
		}
		
		//最后一个字符不是/
		if (!"".equals(path) && !path.endsWith("/")) {
			out.println("Parameter is not valid.");
			return;
		}
		//目录不存在或不是目录
		File currentPathFile = new File(currentPath);
		if(!currentPathFile.isDirectory()){
			out.println("Directory does not exist.");
			return;
		}

		//遍历目录取的文件信息
		List<Hashtable<?,?>> fileList = new ArrayList<Hashtable<?,?>>();
		if(currentPathFile.listFiles() != null) {
			for (File file : currentPathFile.listFiles()) {
				Hashtable<String, Object> hash = new Hashtable<String, Object>();
				String fileName = file.getName();
				if(file.isDirectory()) {
					hash.put("is_dir", true);
					hash.put("has_file", (file.listFiles() != null));
					hash.put("filesize", 0L);
					hash.put("is_photo", false);
					hash.put("filetype", "");
				} else if(file.isFile()){
					String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
					hash.put("is_dir", false);
					hash.put("has_file", false);
					hash.put("filesize", file.length());
					hash.put("is_photo", Arrays.<String>asList(FILETYPES).contains(fileExt));
					hash.put("filetype", fileExt);
				}
				hash.put("filename", fileName);
				hash.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));
				fileList.add(hash);
			}
		}

		if ("size".equals(order)) {
			Collections.sort(fileList, new SizeComparator());
		} else if ("type".equals(order)) {
			Collections.sort(fileList, new TypeComparator());
		} else {
			Collections.sort(fileList, new NameComparator());
		}
		
		out.println(toJSONString(currentUrl, currentDirPath, moveupDirPath, fileList));
		
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
	
	/**
	 * 输出打印上传失败语句的脚本
	 * 
	 * @param message    失败信息
	 * 
	 * @return 页面打印的脚本语句
	 */
	public String alertMsg(String message) {
		StringBuffer sb = new StringBuffer("<script type\"text/javascript\">");
		sb.append("alert(\"").append(message).append("\");");
		sb.append("</script>");
		return sb.toString();
	}
	
	public String toJSONString(String currentUrl, String currentDirPath, String moveupDirPath, List<Hashtable<?, ?>> fileList){
		StringBuilder sb = new StringBuilder("{\"current_url\":\"");
		sb.append(currentUrl).append("\",").append("\"current_dir_path\":\"");
		sb.append(currentDirPath).append("\",\"moveup_dir_path\":\"").append(moveupDirPath).append("\",");
		sb.append("\"file_list\":[");
		int i = 0;
		sb.append("{");
		for(Hashtable<?,?> he : fileList){	
			if(i != (fileList.size() - 1)){
				sb.append("\"filename\":\"").append(he.get("filename")).append("\",");
				sb.append("\"filesize\":").append(he.get("filesize")).append(",");
				sb.append("\"filetype\":\"").append(he.get("filetype")).append("\",");
				sb.append("\"has_file\":").append(he.get("has_file")).append(",");
				sb.append("\"is_dir\":").append(he.get("is_dir")).append(",");
				sb.append("\"is_photo\":").append(he.get("is_photo")).append(",");
				sb.append("\"datetime\":\"").append(he.get("datetime")).append("\"");
				sb.append("},{");
			}else{
				sb.append("\"filename\":\"").append(he.get("filename")).append("\",");
				sb.append("\"filesize\":").append(he.get("filesize")).append(",");
				sb.append("\"filetype\":\"").append(he.get("filetype")).append("\",");
				sb.append("\"has_file\":").append(he.get("has_file")).append(",");
				sb.append("\"is_dir\":").append(he.get("is_dir")).append(",");
				sb.append("\"is_photo\":").append(he.get("is_photo")).append(",");
				sb.append("\"datetime\":\"").append(he.get("datetime")).append("\"");
				sb.append("}");
			}
			i++;
		}
		i = 0;
		sb.append("],\"total_count\":").append(fileList.size()).append("}");
		return sb.toString();
	}

	public class NameComparator implements Comparator<Object> {
		public int compare(Object a, Object b) {
			Hashtable<?, ?> hashA = (Hashtable<?, ?>) a;
			Hashtable<?, ?> hashB = (Hashtable<?, ?>) b;
			if (((Boolean) hashA.get("is_dir"))
					&& !((Boolean) hashB.get("is_dir"))) {
				return -1;
			} else if (!((Boolean) hashA.get("is_dir"))
					&& ((Boolean) hashB.get("is_dir"))) {
				return 1;
			} else {
				return ((String) hashA.get("filename")).compareTo((String) hashB.get("filename"));
			}
		}
	}

	public class SizeComparator implements Comparator<Object> {
		public int compare(Object a, Object b) {
			Hashtable<?, ?> hashA = (Hashtable<?, ?>) a;
			Hashtable<?, ?> hashB = (Hashtable<?, ?>) b;
			if (((Boolean) hashA.get("is_dir"))
					&& !((Boolean) hashB.get("is_dir"))) {
				return -1;
			} else if (!((Boolean) hashA.get("is_dir"))
					&& ((Boolean) hashB.get("is_dir"))) {
				return 1;
			} else {
				if (((Long) hashA.get("filesize")) > ((Long) hashB.get("filesize"))) {
					return 1;
				} else if (((Long) hashA.get("filesize")) < ((Long) hashB.get("filesize"))) {
					return -1;
				} else {
					return 0;
				}
			}
		}
	}

	public class TypeComparator implements Comparator<Object> {
		public int compare(Object a, Object b) {
			Hashtable<?, ?> hashA = (Hashtable<?, ?>) a;
			Hashtable<?, ?> hashB = (Hashtable<?, ?>) b;
			if (((Boolean) hashA.get("is_dir"))
					&& !((Boolean) hashB.get("is_dir"))) {
				return -1;
			} else if (!((Boolean) hashA.get("is_dir"))
					&& ((Boolean) hashB.get("is_dir"))) {
				return 1;
			} else {
				return ((String) hashA.get("filetype")).compareTo((String) hashB.get("filetype"));
			}
		}
	}

}

 

   3.上传附件的类

 

package com.elkan.kindeditor.upload;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadAccessory extends HttpServlet {

	private static final long serialVersionUID = 1L;

	// 上传文件的大小
	protected long MAX_SIZE = 1000000;
	// 定义允许上传的文件的扩展名
	protected String[] FILETYPES = new String[]{"doc", "xls", "ppt", "pdf", "txt", "rar" , "zip"};
	// 定义上传文件保存目录路径
	protected String UPLOAD_PATH = "";
	
	protected String id = "";  

	protected String attachTitle = ""; 

	protected boolean isFlag = false;

	protected String tempTitle = "";


	public void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		String savePath = this.getInitParameter("UPLOAD_PATH");
		if (savePath == null || savePath.isEmpty()) {
			out.println(alertMsg("你还没设置上传文件保存的目录路径!"));
			return;
		}
		//判断是否设置了上传文件的大小
		if(this.getInitParameter("MAX_SIZE") != null){
			MAX_SIZE = Integer.parseInt(this.getInitParameter("MAX_SIZE"));
		}
		//判断是否设置了上传文件的类型
		if(this.getInitParameter("FILETYPES") != null){
			FILETYPES = toArray(this.getInitParameter("FILETYPES"));
		}
		// 文件保存目录路径
		String uploadPath = new StringBuffer(request.getSession().getServletContext().getRealPath("/")).append(savePath).toString();

		// 文件保存目录URL
		String saveUrl = new StringBuffer(request.getContextPath()).append("/").append(savePath).toString();

		if(!ServletFileUpload.isMultipartContent(request)){	
			out.println(alertMsg("请选择要上传的文件。"));
			return;
		}
		//检查目录
		File uploadDir = new File(uploadPath);
		if(!uploadDir.isDirectory()){
			out.println(alertMsg("上传目录不存在。"));
			return;
		}
		//检查目录写权限
		if(!uploadDir.canWrite()){
			out.println(alertMsg("当前角色对上传目录没有写权限。"));
			return;
		}

		FileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setHeaderEncoding("UTF-8");
		String temp = null;
		String ext = null;
		try{
			List<?> items = upload.parseRequest(request);
			Iterator<?> itr = items.iterator();
			while (itr.hasNext()) {
				FileItem item = (FileItem) itr.next();
				String fileName = item.getName();
				temp = (String) item.getName();
				if(temp != null && !isFlag){
					temp = temp.substring(temp.lastIndexOf("\\")+1);
					tempTitle = temp;
					isFlag = true;
				}
				// KindEditor编辑器的ID  
				if(((String)item.getFieldName()).equals("id")){   
					id = item.getString(); 
				}  
				// 上传图片的重新提示
				if(((String)item.getFieldName()).equals("attachTitle")){   
					attachTitle = item.getString(); 
					if(attachTitle != null){
						attachTitle = new String(attachTitle.getBytes("ISO8859-1"),"UTF-8");
					}
				} 
				if (!item.isFormField()) {
					//检查文件大小
					if(item.getSize() > MAX_SIZE){						
						out.println(alertMsg("上传文件大小超过限制。"));
						return;
					}
					//检查扩展名
					String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
					if(!Arrays.<String>asList(FILETYPES).contains(fileExt)){
						out.println(alertMsg("上传文件扩展名是不允许的扩展名。"));
						return;
					}
					// 根据时间创建文件夹
					SimpleDateFormat folderNameFormat = new SimpleDateFormat("yyyyMMdd");
					String realPath = uploadPath + folderNameFormat.format(new Date());
					File folder = new File(realPath);
					boolean flag = folder.exists();
					// 确认文件夹是否已经存在
					if(!flag){
						flag = folder.mkdir();
					}
					// 创建文件夹并上传图片
					if(flag){
						SimpleDateFormat fileNameFormat = new SimpleDateFormat("yyyyMMddHHmmss");					
						String newFileName = fileNameFormat.format(new Date()) + "_"+ new Random().nextInt(1000) + "." + fileExt;						
						File uploadedFile = new File(realPath, newFileName);						
						item.write(uploadedFile);
						saveUrl += folderNameFormat.format(new Date()) + "/" + newFileName;	
						ext = fileExt;
					}else{
						System.out.println(" 文件夹创建失败,请确认磁盘没有写保护并且空件足够");
					}				
				}
			}
			

			if(attachTitle == null || attachTitle.isEmpty()){
				attachTitle = tempTitle;
			}
			
			out.println(insertAttach(id, saveUrl, attachTitle, ext));
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			out.flush();
			out.close();
			isFlag = false;
		}
	}

	
	/**
	 * 输出打印上传失败语句的脚本
	 * 
	 * @param message    失败信息
	 * 
	 * @return 页面打印的脚本语句
	 */
	public String alertMsg(String message){
		
		StringBuilder sb = new StringBuilder("<html>");
		sb.append("<head>").append("<title>error</title>");
		sb.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
		sb.append("</head>");
		sb.append("<body>");
		sb.append("<script type=\"text/javascript\">");
		sb.append("alert(\"").append(message).append("\");history.back();</script>");
		sb.append("</body>").append("</html>");

		return sb.toString();
	}
	
	/**
	 * 输出插入附件至编辑器语句的脚本
	 * 
	 * @param id     编辑器ID
	 * 
	 * @param url    上传附件的地址
	 * 
	 * @param title  上传时设置的title属性
	 * 
	 * @param ext    上传文件的后缀名
	 * 
	 * @return  插入附件至编辑器的脚本语句
	 */
	public String insertAttach(String id, String url, String title, String ext){
		StringBuilder sb = new StringBuilder("<html>");
		sb.append("<head>").append("<title>Insert Accessory</title>");
		sb.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
		sb.append("</head>");
		sb.append("<body>");
		sb.append("<script type=\"text/javascript\">");
		sb.append("parent.KE.plugin[\"accessory\"].insert(\"").append(id).append("\",\"");
		sb.append(url).append("\",\"").append(title).append("\",\"").append(ext).append("\");</script>");
		sb.append("</body>").append("</html>");
		return sb.toString();
	}

	/**
	 * 输出允许上传图片类型的数组
	 * 
	 * @param filesType 允许上传的图片类型
	 * 
	 * @return 允许上传图片类型
	 */
	public String[] toArray(String filesType){

		if(filesType == null){
			return null;
		}

		String[] types = filesType.split(",");
		String[] allowTypes = new String[types.length];
		int i = 0;
		for(String type : types){
			allowTypes[i] = type;
			i++;
		}

		return allowTypes;
	}
}

 

  4.压缩图片的类

 

package com.elkan.utils;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 对图片进行处理的方法
 * 
 * @author SENHUI
 */
public class ImageUtil {
	
	public static int ImgWidth = -1;
	
	public static int ImgHeight = -1;


	
	/**
	 * 压缩图片
	 * 
	 * @param imgsrc
	 *            源文件
	 * @param imgdist
	 *            目标文件
	 * @param widthdist
	 *            宽
	 * @param heightdist
	 *            高
	 */
	public static void resizeImg(String imgsrc, String imgdist,
			int widthdist, int heightdist) {
		try {
			File srcfile = new File(imgsrc);
			if (!srcfile.exists()) {
				return;
			}
			Image src = ImageIO.read(srcfile);		
			ImgWidth = src.getWidth(null);
			ImgHeight = src.getHeight(null);
			if(ImgWidth < widthdist){
				widthdist = ImgWidth;
			}else{
				ImgWidth = widthdist;
			}
			if(ImgHeight < heightdist){
				heightdist = ImgHeight;
			}else{
				ImgHeight = heightdist;
			}
			BufferedImage tag = new BufferedImage(widthdist, heightdist,BufferedImage.TYPE_INT_RGB);	
			
			tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist,Image.SCALE_SMOOTH), 0, 0, null);
			FileOutputStream out = new FileOutputStream(imgdist);
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(tag);
			out.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

 

   呵,源码发布就到此了,上面有都有比较详细的注释文档了,相信各位可以看个明白吧。现在大家有什么自定义的功能要开发的就拿去用吧,别忘记把你开发出来的东东分享下哦,我在此恭候你的大驾光临啊,嘻嘻…… 不管你对此文章满意与否都留下个印记吧,下次用得上时好来取呀,呵。对了最后再给大家留道作业吧,怎么样把上传的附件进行分类管理呢?比如:word放到word文件夹目录………(此功能已经实现,不过公布的代码里没有,大家思考下吧,看看谁的方法最优化,呵)


附:对一些提问的回答


1.为何在STRUTS2里面不能使用?

答:在项目开发中一般配置Struts2的过滤映射是全部站资源,修改成只要过滤你的Struts2访问资源便可。

    (现在源码公布了,你们可以把那些上传方法写到Action里面)

2.到处都是定义上传类型, 是不是很累赘啊?

答:在web.xml配置上传类型是当初发布时考虑到重用性的问题,再说默认的上传文件类型应该够用了吧,只要限定大小与保存路径便可了;在JSP页面初始化编辑器定义上传文件类型是为了上传前的JS脚验证,如果说这都很麻烦,那我也没办法了。

3.能否添加代码高亮功能?

答:当初改版这个编辑器时的出发点是为适合我们的项目,所以这个功能没有考虑,不过网上有没有代码高亮插件,可自行参考设计下

4.能否粘贴word文档里面的图片?

答:这个功能还真是没有哦,我对WEB前端不是很熟悉,不过我倒是开发出表格合并的功能,目前还在测试阶段。如能开发这个图片粘贴的话就好了,不过好像要插件支持才行吧,唉,windows的东西不太好玩呀。

…………

分享到:
评论
13 楼 2006081224 2014-07-18  
    
12 楼 kefengw 2014-03-08  
博主好,用最新版的 4.xx kindeditor, 配合你的后台代码上传文件会出错,好像是上传成功后返回的javascript 回调函数(insertEditor里的代码)在4.xx 里不支持,能指点一下怎么去4.xx版本找出最新的回调函数吗?

另外图片管理类 UploadImageManager  是好用的。

非常感谢!!
11 楼 javawang2012 2013-05-08  
感谢作者,厚道人
10 楼 mida 2012-05-28  
没办法,jdk的问题,会使得jar根本用不成。所以只能要源码了
9 楼 arfish 2012-03-31  
很不错,谢谢分享
8 楼 刘创_2009 2012-02-20  
请问楼主,KE.show({id : "feditor",能换成name么?
7 楼 gaohuixiang315 2011-09-10  
支持啊!!!
6 楼 klovelovely 2011-06-13  
嗯,感谢苍天还有这样有耐心的人!
5 楼 flashing 2011-05-26  
赞美楼主啊。
另外那个小问题,用mimetype直接做分类把。
4 楼 java_林 2011-05-26  
<div class="quote_title">2006081224 写道</div>
<div class="quote_div">
<p>楼主你好,我应用这个编辑器的时候,怎么无法浏览服务器上上传的图片啊,点击浏览之后就停留在那个等待界面了</p>
</div>
<p>如果你用的是struts2的话,请认真看LZ的“<span style="">附:对一些提问的回答”中的第一条</span></p>
3 楼 2006081224 2011-05-20  
<p>楼主你好,我应用这个编辑器的时候,怎么无法浏览服务器上上传的图片啊,点击浏览之后就停留在那个等待界面了</p>
2 楼 sziitjiang 2011-05-10  
嗯,谢谢了,我使用的是struts2,现在又弄一个文件上传的,用了这个编辑器之后,附件上传本来就OK了,如果我再写一个文件上传的,那岂不是很累赘?幸好,lz您的代码出来了,鼓掌鼓掌.....
1 楼 ericslegend 2011-05-05  
谢谢分享,现在有耐心做这些事的人越来越少了,都太浮躁

相关推荐

    jsp版的kindeditor附件上传组件

    ### jsp版KindEditor附件上传组件详解 #### 一、概述 在当今互联网技术日新月异的时代,富文本编辑器成为了网站开发中不可或缺的一部分。其中,KindEditor是一款功能强大且易于使用的富文本编辑器,它支持多种...

    jsp实现kindeditor在线编辑器可上传图片,附件源码献上

    本篇将深入探讨如何使用JSP与KindEditor在线编辑器实现图片和附件的上传功能,并分享一套已经成功部署并经过测试的源码。首先,我们需要了解JSP(JavaServer Pages)和KindEditor的基本概念。 **JSP技术介绍** JSP...

    kindeditor jsp示例源码(包含上传文件)

    本示例源码是专门为Java Web开发者设计的,展示了如何在JSP页面中集成KindEditor并实现文件上传功能。 1. **KindEditor的基本使用** KindEditor提供了JavaScript库,可以在网页中创建一个全功能的富文本编辑器。...

    kindeditor JSP版支持kindeditor4.0.3

    1.将以下的JAR包放到工程的lib目录下 * commons-fileupload-1.2.1.jar * commons-io-1.4.jar * kindeditorservlet.jar 2.web.xml 的servlet及相关属性设置 &lt;!-- 图片上传的SERVLET --&gt; &lt;servlet-name&gt;...

    JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能)

    JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能) 1.集合了日期、时间、在线预览和特殊字符插件,采用3.0皮肤; 2.将图片上传与管理的JSP页面改写成SERVLET,同时去除JSON包; 3.添加图片压缩...

    jsp+kindeditor html 页面编辑

    集成KindEditor到JSP项目中,首先需要将KindEditor的资源文件(如js、css、images等)部署到服务器的公共目录,然后在JSP页面中通过`&lt;script&gt;`标签引入KindEditor的JavaScript库。接下来,我们需要创建一个div元素...

    kindeditor(jsp版)视频上传

    3. **配置KindEditor**:下载KindEditor的源码包,找到配置文件,如`config.js`,并根据七牛提供的SDK文档,配置上传的URL和参数,如设置`upload_json`参数为七牛提供的上传接口URL,`fileManagerJson`参数为获取...

    kindeditor jsp 上传附件版

    【KindEditor JSP 上传附件版】是一款专为KindEditor在线编辑器设计的JSP实现的附件上传功能。KindEditor是一款流行的开源富文本编辑器,它提供了丰富的API和多样的功能,使得用户在网页上可以方便地进行文字编辑、...

    KindEditor ASP 版网站后台编辑器源码

    资源名:KindEditor ASP 版后台编辑器源码 资源类型:程序源代码 源码说明: KindEditor ASP版后台编辑器UTF-8和GB2312均可用 这是KindEditor的ASP版网站后台编辑器,通过测试使用的。 兼容现有的各种浏览器,UTF-8...

    kindeditor编辑器jsp版

    KindEditor支持本地图片和附件上传。在服务器端,开发者通常需要编写Java代码来处理上传请求,包括文件的接收、保存路径的设定、文件类型检查以及大小限制等。可以使用Servlet或Spring MVC等框架来完成这部分工作。...

    kindeditor富文本框的所有jar以及demo

    使用富文本框可以在页面显示各种样式,显示的结果和world里面的都一样,可以更改各种内容的样式

    kindeditor 编辑器php 版 支持附件上传功能!

    kindeditor 编辑器php 版 支持附件上传功能! kindeditor 编辑器php 版 支持附件上传功能!kindeditor 编辑器php 版 支持附件上传功能!kindeditor 编辑器php 版 支持附件上传功能!kindeditor 编辑器php 版 支持...

    kindeditor插件,用来实现附件上传功能,jsp版.rar

    kindeditor插件,用来实现附件上传功能,jsp版的,可惜应用量不大,由于电脑上没有JSP环境,因此未能测试,感谢您对烈火下载的支持。

    kindeditor(asp,php,jsp,asp.net)在线编辑器源码

    而"kindeditor-4.1.6"则是KindEditor的主程序包,包含了所有必要的JavaScript、CSS、图片和语言文件。 总之,KindEditor是一款优秀的在线编辑器,无论你是在哪种服务器端平台上开发,都能找到合适的集成方案。其...

    jsp中kindeditor的用和遇到的问题总结附上项目配置

    在Java服务器页面(JSP)开发中,引入富文本编辑器是常见的需求,KindEditor是一个功能强大、易于使用的开源富文本编辑器。本篇文章将详细阐述如何在JSP项目中集成KindEditor,以及可能遇到的问题及解决方案。 首先...

    带附件上传功能的kindeditor编辑器

    至于压缩包内的“kindeditor”文件,这很可能包含了KindEditor的源码、样式文件、语言包和可能的自定义插件。开发者可以通过修改这些文件来扩展编辑器功能,或者调整其样式以适应项目需求。 总的来说,这个项目展示...

    java 富文本kindeditor4.0.3_jsp整合

    首先,我们需要下载KindEditor的源码包,这里提供的是kindeditor-v4.0.3.zip。解压该文件,你会得到包含编辑器核心文件和样例的目录结构。主要的文件有: 1. `js/kindeditor.js`:这是KindEditor的主要JavaScript...

    kindeditor-3.4.4文本编译器JSP版

    此为kindeditor-3.4.4文本编译器JSP版 里面实现图片上传 此项目直接导入myeclipse就可以使用 测试输入http://localhost:8080/jsp/demo.jsp 此为tomcat服务器访问路径

    JSP kindeditor编辑器使用,能上传图片,解决乱码问题

    在本文中,我们将深入探讨如何在JSP环境中使用KindEditor编辑器,以及如何解决与上传图片和乱码问题相关的挑战。KindEditor是一款功能强大的HTML在线编辑器,它为用户提供了一个类似Word的界面来编辑网页内容。以下...

    kindeditor的JSP示例

    集成KindEditor到JSP项目中,首先你需要下载官方提供的源码包,然后根据项目需求进行必要的配置。虽然官方的示例可能需要较多的修改才能适应你的项目,但这里我们提供了一个最小化的集成示例,其中包含了`jsp/demo....

Global site tag (gtag.js) - Google Analytics