`
yxgyh
  • 浏览: 274277 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JSP版的完善KindEditor在线编辑器开源代码

 
阅读更多
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();
		}
	}
}

 

感谢senhui19开源代码,很经典,收藏了

http://senhui19.iteye.com/blog/1028917

分享到:
评论

相关推荐

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

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

    jsp 版的KindEditor 3.5.1编辑器 外部编辑器 web编辑器 最新版的KindEditor 编辑器 适合asp jsp的编辑器

    jsp 版的KindEditor 3.5.1编辑器 外部编辑器 web编辑器 最新版的KindEditor 编辑器 适合asp jsp的编辑器 这是经过本人一个下午测试的 ,保证可以使用 在这拿出来 大家一起学习学习 QQ290273103

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

    **KindEditor编辑器** KindEditor是一款开源的JavaScript富文本编辑器,它支持多种浏览器,提供了丰富的编辑功能,如文字格式化、图片上传、链接插入等。KindEditor的一大亮点是其易于集成和自定义,开发者可以根据...

    kindeditor编辑器jsp版

    综上所述,KindEditor编辑器是JSP开发中的一个强大工具,它能提供完善的在线文本编辑功能,同时支持自定义和扩展,为开发人员带来极大的便利。在实际项目中,合理利用其特性,可以提升用户在Web应用中的编辑体验。

    asp 版的KindEditor 3.5.1编辑器 外部编辑器 web编辑器 最新版的KindEditor 编辑器 适合asp jsp的编辑器

    asp 版的KindEditor 3.5.1编辑器 外部编辑器 web编辑器 最新版的KindEditor 编辑器 适合asp jsp的编辑器 这是经过本人一个下午测试的 ,保证可以使用 在这拿出来 大家一起学习学习 QQ290273103

    kindeditor在线HTML代码编辑器

    在实际应用中,通常需要将编辑器生成的HTML代码保存到数据库或文件系统中,`demo.php`可能包含了接收、验证、处理这些数据的基本逻辑。`README.txt`和`LICENCE.txt`则是关于编辑器的使用说明和许可协议,对如何合法...

    KindEditor富本编辑器-jsp版

    KindEditor富本编辑器-jsp版 直接复制到项目里直接可以用,本地路径 http://127.0.0.1:8080/KindEditor/kindeditor-4.1.10/examples/default.html

    KindEditor在线编辑器

    KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器。 KindEditor使用JavaScript编写,可以无缝的于Java、.NET、PHP、...

    kindeditor在线编辑器asp.net能用版本

    KindEditor是一款功能强大的开源在线文本编辑器,专为Web应用设计。它支持多种浏览器环境,如Internet Explorer、Firefox、Chrome、Safari等,提供丰富的编辑功能,包括文字格式化、图片上传、链接插入、表格操作等...

    Kindeditor在线编辑器(PHP)版

    KindEditor是一款功能强大的开源在线富文本编辑器,尤其在PHP环境下使用广泛。它提供了一种简单易用的方式来创建和编辑HTML内容,适用于博客、论坛、CMS等网站的后台管理。这款编辑器支持多种浏览器,包括IE6+、Fire...

    kindEditor富文本编辑器(JSP版)

    "KindEditor富文本编辑器(JSP版)"是一款广泛应用于Web开发中的开源富文本编辑器,主要用于提供用户友好的在线文本编辑体验。这个编辑器是用Java语言编写的,适用于JSP(JavaServer Pages)环境,使得开发者可以...

    KindEditor Html在线编辑器

    1. **富文本编辑器**: KindEditor 是一个基于Web的富文本编辑器,用户可以通过类似Word的界面在网页上进行文字编辑、插入图片、创建链接等操作,生成HTML代码。 2. **跨平台兼容**: 由于是基于JavaScript开发,...

    kindeditor文本编辑器(asp.net中使用)

    kindeditor文本编辑器(asp.net中使用) 源代码都在

    18种KindEditor模式HTML编辑器代码

    KindEditor是一款功能强大的开源HTML编辑器,常用于网站内容管理系统的文本输入框,提供丰富的文本格式化选项,如字体、大小、颜色、对齐方式等,同时支持图片上传、视频插入等功能。它提供了多种预定义的编辑模式,...

    kindeditor在线编辑器最简模式.7z

    KindEditor是一款功能强大的开源在线编辑器,主要用于网页内容的创建和编辑。它的“最简模式”是为了提供一个简洁、高效的编辑界面,使用户能够专注于文本输入,而不被复杂的格式选项所干扰。在这个模式下,编辑器的...

    jsp在线编辑器fckeditor和kindeditor的实例

    本文将深入探讨FCKeditor和KindEditor这两个流行的JSP在线编辑器,并介绍如何将它们集成到你的项目中。 **FCKeditor** FCKeditor是一款开源的JavaScript富文本编辑器,最初由Fernando Montesinos开发。它提供了...

    kindeditor 在线编辑器(很强大)

    KindEditor是一款开源的JavaScript在线富文本编辑器,它以其强大的功能和良好的兼容性深受开发者喜爱。这款编辑器能够轻松地嵌入到各种Web应用程序中,包括JSP平台,为用户提供了一个类似于桌面应用的文字编辑环境,...

    kindeditor JSP版支持kindeditor4.0.3

    &lt;servlet-class&gt;com.elkan.kindeditor.upload.UploadImage&lt;/servlet-class&gt; &lt;!-- 上传图片保存的目录 --&gt; &lt;param-name&gt;UPLOAD_PATH &lt;param-value&gt;uploadImg/ &lt;!-- 限制上传图片的大小,单位字节(缺省值为1...

    Kindeditor文本编辑器

    Kindeditor文本编辑器是一款在IT领域中广泛应用的开源富文本编辑器,它的设计目标是提供一个易用且功能丰富的Web内容创作环境。这个编辑器以其简单易上手、功能全面的特点,深受开发者和用户的喜爱。它能够很好地...

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

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

Global site tag (gtag.js) - Google Analytics