kindeditor 文件上传 java_springmvc+kindeditor文件上传实例详解

本文展示了如何在SpringMVC项目中结合KindEditor进行文件上传操作,包括图片上传、文件管理,并提供了关键代码示例。文章涵盖ServletFileUpload、MultipartFile的使用以及上传文件的验证和保存。
摘要由CSDN通过智能技术生成

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

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

4b4a73f2852d8db315c339765b9d0f7c.png

jsp页面

pageEncoding="UTF-8"%>

href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" >

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(

"%22%20+%20url%20+%20%22"); //重置图片展示区DIV的HTML内容

K("#pic").val(url); //重置文本框值

}

}

}

});

});

Insert title here

标题

placeholder="请输入标题">

类别

1

2

3

4

5

内容

class="form-control" >

<strong>HTML内容</strong>

保存草稿

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;

@Controller

public 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 extMap = new HashMap();

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 fileMap = mRequest.getFileMap();

String fileName = null;

for (Iterator> it = fileMap.entrySet().iterator(); it.hasNext();) {

Map.Entry 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. 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.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 fileList = new ArrayList();

if(currentPathFile.listFiles() != null) {

for (File file : currentPathFile.listFiles()) {

Hashtable hash = new Hashtable();

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.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"));

}

}

}

}

效果图

981f92801f5c21012fdd078ae71d0c4e.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值