基于上传图片controller.jsp修改,使用自定义controller接收参数,自定义config.json路径,自定义图片上传位置和图片访问路径
原理:上传图片的过程中,测试发现,页面会请求controller.jsp两次,第一次目的是加载config.json,将其中的数据以json形式返回;第二次就是上传图片,成功后返回json格式数据:{"state": "SUCCESS","original": "Hydrangeas.jpg","size": "595284","title": "1551927256870045443.jpg","type": ".jpg","url": "/upload/image/20190307/1551927256870045443.jpg"}
1、将配置文件请求路径配置为SpringMVC的路径。
2、将config.json拷贝到application.properties同级目录(或者下级目录亦可)
3、编写controller,路径需要加上“ueditor"才行,即@RequestMapping(value = "/ueditor/initController") , 因为存在2此请求,需要根据action值不同做不同处理。MultipartFile upfile 名称需要和cofnig.json中配置的名称相同才行。
其中有3个路径。
一个是config.json的路径,基于classpath的,“/config.json”
二是图片上传的路径,本次将tomcat作为图片服务器,所以地址为:C:/Users/Administrator/Desktop/apache-tomcat-8.5.38/webapps/ROOT/img/
三是图片上传成功后的访问路径,tomcat端口为8080 , 所以图片访问路径为:http://localhost:8080/img/ + imageName
代码如下:
package com.demo.controller;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSON;
@Controller
public class IndexController {
/**
* 初始化UEditor上传文件、图片等配置
*
* @param request
* @param response
*/
@RequestMapping(value = "/ueditor/initController")
public void initController(MultipartFile upfile, HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "text/html");
System.out.println("url : " + request.getRequestURL().toString());
String value = request.getParameter("action");
System.out.println("action:" + value);
// 文件上传的路径
String rootPath = "C:/Users/Administrator/Desktop/tomcat-8.5.38/webapps/ROOT/img/";
String result = null;
if ("config".equals(value)) { // 读取配置文件,将配置文件数据以json格式返回
String configPath = "/config.json";// 配置文件路径, 相对于classpath
/**
* 返回JOSN数据
* {"videoMaxSize":102400000,"videoActionName":"uploadvideo","fileActionName":"uploadfile","fileManagerListPath":"/ueditor/jsp/upload/file/","imageCompressBorder":1600,"imageManagerAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp"],"imageManagerListPath":"/ueditor/jsp/upload/image/","fileMaxSize":51200000,"fileManagerAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp",".flv",".swf",".mkv",".avi",".rm",".rmvb",".mpeg",".mpg",".ogg",".ogv",".mov",".wmv",".mp4",".webm",".mp3",".wav",".mid",".rar",".zip",".tar",".gz",".7z",".bz2",".cab",".iso",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt",".md",".xml"],"fileManagerActionName":"listfile","snapscreenInsertAlign":"none","scrawlActionName":"uploadscrawl","videoFieldName":"upfile","imageCompressEnable":true,"videoUrlPrefix":"","fileManagerUrlPrefix":"","catcherAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp"],"imageManagerActionName":"listimage","snapscreenPathFormat":"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","scrawlPathFormat":"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","scrawlMaxSize":2048000,"imageInsertAlign":"none","catcherPathFormat":"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","catcherMaxSize":2048000,"snapscreenUrlPrefix":"","imagePathFormat":"/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}","imageManagerUrlPrefix":"","scrawlUrlPrefix":"","scrawlFieldName":"upfile","imageMaxSize":2048000,"imageAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp"],"snapscreenActionName":"uploadimage","catcherActionName":"catchimage","fileFieldName":"upfile","fileUrlPrefix":"","imageManagerInsertAlign":"none","catcherLocalDomain":["127.0.0.1","localhost","img.baidu.com"],"filePathFormat":"/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}","videoPathFormat":"/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}","fileManagerListSize":20,"imageActionName":"uploadimage","imageFieldName":"upfile","imageUrlPrefix":"","scrawlInsertAlign":"none","fileAllowFiles":[".png",".jpg",".jpeg",".gif",".bmp",".flv",".swf",".mkv",".avi",".rm",".rmvb",".mpeg",".mpg",".ogg",".ogv",".mov",".wmv",".mp4",".webm",".mp3",".wav",".mid",".rar",".zip",".tar",".gz",".7z",".bz2",".cab",".iso",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".pdf",".txt",".md",".xml"],"catcherUrlPrefix":"","imageManagerListSize":20,"catcherFieldName":"source","videoAllowFiles":[".flv",".swf",".mkv",".avi",".rm",".rmvb",".mpeg",".mpg",".ogg",".ogv",".mov",".wmv",".mp4",".webm",".mp3",".wav",".mid"]}
*/
InputStream inStream = IndexController.class.getResourceAsStream(configPath);
StringBuilder builder = new StringBuilder();
try {
InputStreamReader reader = new InputStreamReader(inStream, "UTF-8");
BufferedReader bfReader = new BufferedReader(reader);
String tmpContent = null;
while ((tmpContent = bfReader.readLine()) != null) {
builder.append(tmpContent);
}
bfReader.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 过滤输入字符串, 剔除多行注释以及替换掉反斜杠
result = builder.toString().replaceAll("/\\*[\\s\\S]*?\\*/", "").replaceAll(" ", "");
System.out.println("result:" + result);
} else if ("uploadimage".equals(value)) {// 上传文件
// 上传成功后返回的json数据
/*
* {"state": "SUCCESS","original": "Hydrangeas.jpg","size": "595284","title":
* "1551927256870045443.jpg","type": ".jpg","url":
* "/upload/image/20190307/1551927256870045443.jpg"}
*/
String originalFilename = upfile.getOriginalFilename();
String type = originalFilename.substring(originalFilename.indexOf("."), originalFilename.length());
long size = upfile.getSize();
System.out.println(originalFilename);
System.out.println(size);
String middlePath = DateFormatUtils.format(new Date(), "yyyyMMdd") + "/";
String fileFullName = rootPath + middlePath + originalFilename;
// 图片访问地址(tomcat服务器)
String url = "http://localhost:8080/img/" +middlePath+ originalFilename;
try {
File file = new File(fileFullName);
if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs() ;
}
upfile.transferTo(file);
Map<String, Object> map = new HashMap<String, Object>();
map.put("state", "SUCCESS");
map.put("original", originalFilename);
map.put("size", size);
map.put("title", originalFilename);
map.put("type", type);
map.put("url", url);
result = JSON.toJSONString(map);
System.out.println("result : " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
PrintWriter writer = response.getWriter();
writer.write(result);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
上传其他类型的数据,处理过程相似。
上传附件:
urL:http://localhost:8080/ueditor/controller.jsp
action:uploadfile
rootPath:C:\Code\UEditor\src\main\webapp\
result:{"state": "SUCCESS","original": "Jellyfish.jpg","size": "775702","title": "1552448428878017500.jpg","type": ".jpg","url": "/ueditor/jsp/upload/file/20190313/1552448428878017500.jpg"}
上传视频:
urL:http://localhost:8080/ueditor/controller.jsp
action:uploadvideo
rootPath:C:\Code\UEditor\src\main\webapp\
result:{"state": "SUCCESS","original": "Wildlife.wmv","size": "26246026","title": "1552448559153027101.wmv","type": ".wmv","url": "/ueditor/jsp/upload/video/20190313/1552448559153027101.wmv"}
urL:http://localhost:8080/ueditor/controller.jsp
action:uploadvideo
rootPath:C:Code\UEditor\src\main\webapp\
result:{"state": "SUCCESS","original": "Kalimba.mp3","size": "8414449","title": "1552448709916055846.mp3","type": ".mp3","url": "/ueditor/jsp/upload/video/20190313/1552448709916055846.mp3"}
urL:http://localhost:8080/ueditor/controller.jsp
action:uploadfile
rootPath:C:Code\UEditor\src\main\webapp\
result:{"state": "SUCCESS","original": "Kalimba.mp3","size": "8414449","title": "1552448852083072299.mp3","type": ".mp3","url": "/ueditor/jsp/upload/file/20190313/1552448852083072299.mp3"}