首页 > 编程 > Java > 正文

springmvc+kindeditor文件上传实例详解

2019-11-26 09:41:29
字体:
来源:转载
供稿:网友

本文实例为大家分享了springmvc+kindeditor文件上传的具体代码,供大家参考,具体内容如下

下载kindeditor

压缩包里面的jar放到tomcat的lib文件夹下,kindeditor文件放工程里,不用的可以删掉

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" ><script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script><script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script><script src="./kindeditor/kindeditor-all-min.js"></script><script src="./kindeditor/lang/zh-CN.js"></script><script> KindEditor   .ready(function(K) {    window.editor = K      .create(        '#editor_id',        {         uploadJson : 'Kindeditor/uploadFile',         fileManagerJson : 'Kindeditor/fileManager',         allowImageUpload : true, //多图上传         allowFileManager : true, //浏览图片空间         filterMode : false, //HTML特殊代码过滤         afterBlur : function() {          this.sync();         }, //编辑器失去焦点(blur)时执行的回调函数(将编辑器的HTML数据同步到textarea)         afterUpload : function(url, data, name) { //上传文件后执行的回调函数,必须为3个参数          if (name == "image"            || name == "multiimage") { //单个和批量上传图片时           if (K("#pic").length > 0) { //文本框存在            document              .getElementById('piclist').options[document              .getElementById('piclist').length] = new Option(              url, url); //下拉列表框增加一条            document              .getElementById('piclist').selectedIndex += 1; //选定刚新增的这一条            K("#indexpicimg")              .html(                "<img src='" + url + "' width='150' height='95' />"); //重置图片展示区DIV的HTML内容            K("#pic").val(url); //重置文本框值           }          }         }        });   });</script><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <form class="form-horizontal" role="form" action="articleAdd" method="post" >  <div class="form-group">   <label for="firstname" class="col-sm-2 control-label">标题</label>   <div class="col-sm-5">    <input type="text" class="form-control" id="title" name="title"     placeholder="请输入标题">   </div>  </div>  <div class="form-group">   <label for="lastname" class="col-sm-2 control-label">类别</label>   <div class="col-sm-3">    <select class="form-control" name="categoryId">     <option>1</option>     <option>2</option>     <option>3</option>     <option>4</option>     <option>5</option>    </select>   </div>  </div>  <div class="form-group">   <label for="lastname" class="col-sm-2 control-label">内容</label>   <div class=" col-sm-5">    <textarea id="editor_id" name="details"     class="form-control" >    <strong>HTML内容</strong>    </textarea>   </div>  </div>  <div class="form-group">   <div class="col-sm-offset-2 col-sm-10">    <button type="submit" class="btn btn-default">保存草稿</button>   </div>  </div> </form></body></html>

KindAction.java

package com.leo.ows.action;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;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.HashMap;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.UUID;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.springframework.stereotype.Controller;import org.springframework.util.FileCopyUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import com.alibaba.fastjson.JSONObject;@Controllerpublic class KindAction { @RequestMapping(value ="/Kindeditor/uploadFile", method = RequestMethod.POST)  public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws Exception {   PrintWriter writer = response.getWriter();   // 文件保存目录路径   String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/image" + File.separatorChar      + File.separatorChar;   String saveUrl = request.getContextPath()+ File.separatorChar + "upload/image" + File.separatorChar     + File.separatorChar;   // 定义允许上传的文件扩展名   HashMap<String, String> extMap = new HashMap<String, String>();   extMap.put("image", "gif,jpg,jpeg,png,bmp");   // 最大文件大小   long maxSize = 1000000;   response.setContentType("text/html; charset=UTF-8");   if (!ServletFileUpload.isMultipartContent(request)) {    writer.println(getError("请选择文件。"));    return;   }   File uploadDir = new File(savePath);   // 判断文件夹是否存在,如果不存在则创建文件夹   if (!uploadDir.exists()) {    uploadDir.mkdirs();   }   // 检查目录写权限   if (!uploadDir.canWrite()) {    writer.println(getError("上传目录没有写权限。"));    return;   }   String dirName = request.getParameter("dir");   if (dirName == null) {    dirName = "image";   }   if (!extMap.containsKey(dirName)) {    writer.println(getError("目录名不正确。"));    return;   }   MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;   Map<String, MultipartFile> fileMap = mRequest.getFileMap();   String fileName = null;   for (Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); it.hasNext();) {    Map.Entry<String, MultipartFile> entry = it.next();    MultipartFile mFile = entry.getValue();    fileName = mFile.getOriginalFilename();    // 检查文件大小    if (mFile.getSize() > maxSize) {     writer.println(getError("上传文件大小超过限制。"));     return;    }    String fileExt = fileName.substring(fileName.lastIndexOf(".")+1);    if (!Arrays.<String> asList(extMap.get(dirName).split(",")).contains(fileExt)) {     writer.println(getError("上传文件扩展名是不允许的扩展名。/n只允许" + extMap.get(dirName) + "格式。"));     return;    }    UUID uuid = UUID.randomUUID();    String path = savePath + uuid.toString() +"."+ fileExt;    saveUrl = saveUrl + uuid.toString() +"."+ fileExt;    BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(path));    FileCopyUtils.copy(mFile.getInputStream(), outputStream);    JSONObject obj = new JSONObject();    obj.put("error", 0);    obj.put("url", saveUrl);    writer.println(obj.toString());   }  }  private String getError(String message) {   JSONObject obj = new JSONObject();   obj.put("error", 1);   obj.put("message", message);   return obj.toString();  }  @RequestMapping(value = "/Kindeditor/fileManager", method = RequestMethod.GET)  public void fileManager(HttpServletRequest request, HttpServletResponse response) throws Exception {   //根目录路径,可以指定绝对路径,比如 /var/www/attached/  String rootPath = request.getSession().getServletContext().getRealPath("/")+ "upload/";  //根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/  String rootUrl = request.getContextPath() + "/upload/";  //图片扩展名  String[] fileTypes = new String[]{"gif", "jpg", "jpeg", "png", "bmp"};  System.out.println(rootPath);  String dirName = request.getParameter("dir");  if (dirName != null) {   if(!Arrays.<String>asList(new String[]{"image", "flash", "media", "file"}).contains(dirName)){    System.out.println("Invalid Directory name.");    return;   }   rootPath += dirName + "/";   rootUrl += dirName + "/";   File saveDirFile = new File(rootPath);   if (!saveDirFile.exists()) {    saveDirFile.mkdirs();   }  }  //根据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) {   System.out.println("Access is not allowed.");   return;  }  //最后一个字符不是/  if (!"".equals(path) && !path.endsWith("/")) {   System.out.println("Parameter is not valid.");   return;  }  //目录不存在或不是目录  File currentPathFile = new File(currentPath);  if(!currentPathFile.isDirectory()){   System.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());  }  JSONObject result = new JSONObject();  result.put("moveup_dir_path", moveupDirPath);  result.put("current_dir_path", currentDirPath);  result.put("current_url", currentUrl);  result.put("total_count", fileList.size());  result.put("file_list", fileList);  response.setContentType("application/json; charset=UTF-8");  System.out.println(result.toJSONString());  PrintWriter writer=response.getWriter();  writer.println(result); } public class NameComparator implements Comparator {  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 {  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 {  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"));   }  } }}

效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表