zoukankan      html  css  js  c++  java
  • kindeditor-4.1.10 ---文件上传

    package com.xxxx.hcxg.commons.utils.web.servlet;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    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.xxx.hcxg.commons.utils.lang.DateUtils;
    import com.xxx.hcxg.commons.utils.lang.PropertiesUtil;
    
    /**
     * 
     * @ClassName:FileUploadServlet
     * @Description:TODO(kindeditor-4.1.10富文本编辑器上传组件)
     *
     * @Copyright: 2017 www.zsplat.com Inc. All rights reserved.
     */
    public class FileUploadServlet extends HttpServlet {
    	//上传路径<Linux>
    	private final String ROOT = File.separator + "home"+ File.separator +"image"+ File.separator;
    //	private final String ROOT = "D:" + File.separator + "resourcesfile"+ File.separator +"images"+ File.separator;
    	
    	private static final long serialVersionUID = 1L;
    	// 定义允许上传的文件扩展名
    	protected HashMap<String, String> extMap = new HashMap<String, String>();
    	// 最大文件大小
    	protected long maxSize = 100000000;
    	// 上传文件的保存路径
    	protected String configPath = "kindeditor" + File.separator;
     
    	public void init() throws ServletException {
    		extMap.put("image", "gif,jpg,jpeg,png,bmp");
    		extMap.put("flash", "swf,flv");
    		extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
    		extMap.put("file", "doc,docx,xls,xlsx,pdf,ppt,htm,html,txt,zip,rar,gz,bz2");
    	}
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		this.doPost(request, response);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String dirName = request.getParameter("dir");
    		if (dirName == null) {
    			dirName = "image";
    		}
    		if ("image".equals(dirName)) {
    			// 上传的图片大小
    			Long size = Long.parseLong(getInitParameter("Img_MAX_SIZE"));
    			if (size != null) {
    				maxSize = size;
    			}
    			// 上传图片的类型(缺省值为gif, jpg, jpeg, png, bmp)
    			String type = getInitParameter("Img_YPES");
    			if (type != null) {
    				extMap.put("image", type);
    			}
    		} else {
    			// 上传的图片大小
    			Long size = Long.parseLong(getInitParameter("File_MAX_SIZE"));
    			if (size != null) {
    				maxSize = size;
    			}
    
    			if ("file".equals(dirName)) {
    				// 上传文件的类型(doc, xls, ppt, pdf, txt, rar, zip)
    				String type = getInitParameter("File_TYPES");
    				if (type != null) {
    					extMap.put("file", type);
    				}
    			}
    		}
    		if (configPath == null) {
    			renderText(getError("你还没设置上传文件保存的目录路径!"), response);
    			return;
    		}
    		// 文件保存目录路径
    		String savePath = ROOT + configPath;
    		if (!ServletFileUpload.isMultipartContent(request)) {
    			renderText(getError("请选择文件。"), response);
    			return;
    		}
    		// 检查目录
    		File uploadDir = new File(savePath);
    		if(!uploadDir.exists()){
    			uploadDir.mkdirs();
    		}
    		// 检查目录写权限
    		if (!uploadDir.canWrite()) {
    			renderText(getError("传目录没有写权限。"), response);
    			return;
    		}
    
    		if (!extMap.containsKey(dirName)) {
    			renderText(getError("目录名不正确。"), response);
    			return;
    		}
    		// 创建文件夹
    		String date = DateUtils.getCurrentTime("yyyy-MM-dd");
    		savePath += date + File.separator;
    		File dirFile = new File(savePath);
    		if (!dirFile.exists()) {
    			dirFile.mkdirs();
    		}
    
    		FileItemFactory factory = new DiskFileItemFactory();
    		ServletFileUpload upload = new ServletFileUpload(factory);
    		upload.setHeaderEncoding("UTF-8");
    
    		try {
    			List<?> items = upload.parseRequest(request);
    			Iterator<?> itr = items.iterator();
    			while (itr.hasNext()) {
    				FileItem item = (FileItem) itr.next();
    				String fileName = item.getName();
    				//long fileSize = item.getSize();
    				if (!item.isFormField()) {
    					// 检查文件大小
    					if (item.getSize() > maxSize) {
    						renderText(getError("上传文件大小超过限制。"), response);
    						return;
    					}
    					// 检查扩展名
    					String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    					if (!Arrays.<String> asList(extMap.get(dirName).split(",")).contains(fileExt)) {
    						renderText(getError("上传文件扩展名是不允许的扩展名。
    只允许" + extMap.get(dirName) + "格式。"), response);
    						return;
    					}
    					String newFileName = DateUtils.getCurrentTime("yyyyMMddHHmmss") + new Random().nextInt(1000) + "." + fileExt;
    					try {
    						File uploadedFile = new File(savePath, newFileName);
    						item.write(uploadedFile);
    					} catch (Exception e) {
    						renderText(getError("上传文件失败。"), response);
    						return;
    					}
    
    					Map<String, Object> obj = new HashMap<String, Object>();
    					obj.put("error", 0);
    					String returnImgUrl = PropertiesUtil.loadResource("IMG_HTTP_SERVER", "image.properties") + configPath + date + File.separator + newFileName;
    					returnImgUrl = returnImgUrl.replaceAll("\\", "/");
    					obj.put("url", returnImgUrl);
    					renderText(obj, response);
    				}
    			}
    		} catch (FileUploadException e1) {
    			e1.printStackTrace();
    		}
    	}
    
    	private Map<String, Object> getError(String message) {
    		Map<String, Object> obj = new HashMap<String, Object>();
    		obj.put("error", 1);
    		obj.put("message", message);
    		return obj;
    	}
    	
    	/**
    	 * 
    	 * @Title: renderText 
    	 * @Description: TODO(输出 html/text格式 json字符串 <br>自动将data参数转换为json字符串) 
    	 * @param data
    	 * 				         输出数据 可以是List Map等
    	 * @return void    返回类型 
    	 * @throws
    	 */
    	public void renderText(Object data, HttpServletResponse response) {
    		response.setContentType("text/plain;charset=UTF-8");
    		setDisableCacheHeader(response);
    		PrintWriter out = null;
    		try {
    			out = response.getWriter();
    			out.print(JsonMapper.nonEmptyMapper().toJson(data));
    			out.flush();
    		} catch (IOException e) {
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		} finally {
    			if (out != null) {
    				out.close();
    			}
    		}
    	}
    
    	/**
    	 * 
    	 * @Title: setDisableCacheHeader 
    	 * @Description: TODO(设置禁止客户端缓存的Header.) 
    	 * @param @param response    设定文件 
    	 * @return void    返回类型 
    	 * @throws
    	 */
    	public void setDisableCacheHeader(HttpServletResponse response) {
    		// Http 1.0 header
    		response.setDateHeader("Expires", 1L);
    		response.addHeader("Pragma", "no-cache");
    		// Http 1.1 header
    		response.setHeader("Cache-Control", "no-cache, no-store, max-age=0");
    	}
    
    }
    

      js中    富文本编辑器中调用文件上传的接口

           var serviceDetails;
                window.setTimeout(function() {
                    serviceDetails = KindEditor.create('#serviceDetails', {
                        //width : '700px',
                        height : '250px',
                        minWidth:'650px',//默认最小值为"650px"
                        items : [ 'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste', 'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript', 'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/', 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak', 'anchor', 'link', 'unlink' ],
                        allowFileManager : true,
                        uploadJson : 'servlet/FileUploadServlet',
                        fileManagerJson : '',//servlet/FileManagerServlet
                        afterCreate:function(){ //加载完成后改变皮肤
                            this.sync(); 
                            var color = $('.panel-header').css('background-color');
                            $('.ke-toolbar').css('background-color',color);
                        }, 
                        afterUpload : function(url, data, name){
                            
                        },
                        afterBlur:function(){
                            this.sync(); 
                        } 
                    });
                }, 1);

    页面中 

    <link rel="stylesheet" href="library/kindeditor-4.1.10/themes/default/default.css" type="text/css"></link>
    <link rel="stylesheet" href="views/appManage/goods/goods/css/addGoods.css" type="text/css"></link>
    <script type="text/javascript" src="library/kindeditor-4.1.10/kindeditor-min.js"></script>
    <script type="text/javascript" src="library/kindeditor-4.1.10/lang/zh_CN.js"></script>
    
    
    <form>
     <div class="form-group">
    <label for="goodsTitle">商品服务介绍</label>
                <!-- <textarea rows="2" class="form-control" maxlength="300" ng-model="goods.serviceDetails" name="serviceDetails" id="serviceDetails" placeholder="服务详情"></textarea> -->
                <textarea rows="2" class="form-control" ng-model="goods.serviceDetails" name="serviceDetails" id="serviceDetails" placeholder="商品描述"></textarea>
                <label for="goodsTitle">服务过程</label>
                <!-- <textarea rows="2" class="form-control" maxlength="300" ng-model="goods.serviceProcedure" name="serviceProcedure" id="serviceProcedure" placeholder="服务过程"></textarea> -->
                <textarea rows="2" class="form-control" ng-model="goods.serviceProcedure" name="serviceProcedure" id="serviceProcedure" placeholder="商品描述"></textarea>
            </div>
    </form>

    效果:

               

  • 相关阅读:
    阅读ARm芯片手册 阅读方法
    Linux驱动mmap内存映射
    Linux下inotify的基本使用及注意事项
    网络视频监控与人脸识别
    Linux pci驱动源码
    Verilog语法
    跟着我从零开始入门FPGA(一周入门XXOO系列)-1、Verilog语法
    周立功-我的25年嵌入式生涯
    Linux 进程学习
    [转]MFC下关于“建立空文档失败”问题的分析
  • 原文地址:https://www.cnblogs.com/zhou-pan/p/9239240.html
Copyright © 2011-2022 走看看