当编辑器界面出来时,你是不是很开心,但是你想上传图片的时候就发现如下图
文件上传是不可用的,这是因为后端的路径没有配置正确,这个时候需要修改ueditor/ueditor.config.js文件如下图所示
修改后需要新建一个控制器,把URL指向为你修改对应的URL,以下是servlet的代码例子,写的比较烂就将就下,好歹能运行,注意这里和JS路径要一样
@WebServlet(name="UeditorServlet", urlPatterns="/static/ueditor/jsp/controller")
package net.mbzj.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.UUID;
import com.alibaba.fastjson2.JSONObject;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;
import net.mbzj.bean.Uploads;
import net.mbzj.bean.User;
import net.mbzj.utils.StringUtils;
import net.mbzj.utils.ueditor.ActionEnter;
@WebServlet(name="UeditorServlet", urlPatterns="/static/ueditor/jsp/controller")
@MultipartConfig
public class UeditorServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("application/json");
String rootPath = request.getSession().getServletContext().getRealPath("/");
try {
request.setCharacterEncoding( "utf-8" );
response.setHeader("Content-Type" , "text/html");
String action = request.getParameter("action");
User user = StringUtils.UserSession(request);
if(user==null) {
}else {
String result = new ActionEnter( request, rootPath ).exec();
if( action!=null && (action.equals("listfile") || action.equals("listimage") ) ){
rootPath = rootPath.replace("\\", "/");
result = result.replaceAll(rootPath, "/");
}
String exec = new ActionEnter(request, rootPath).exec();
PrintWriter writer = response.getWriter();
writer.write(exec);
writer.flush();
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String action = request.getParameter("action");
//处理视频上传
if(action.equals("uploadvideo")) {
User user = StringUtils.UserSession(request);
if(user==null) {
}else {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String website = StringUtils.getWebsite(request);
//存储路径
String savePath = request.getServletContext().getRealPath("/uploads");
File file = new File(savePath);
if(!file.exists()) {
file.mkdir();
Runtime.getRuntime().exec("chmod 777 " + savePath);
}
//获取上传的文件集合
Collection<Part> parts = request.getParts();
//上传单个文件
String fileName = null;
String saveName = null;
String tempId = request.getParameter("tempId");
long fileSize = 0;
if (parts.size()==1) {
//Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
//Part part = parts[0];//从上传的文件集合中获取Part对象
Part part = request.getPart("file");//通过表单file控件(<input type="file" name="file">)的名字直接获取Part对象
if(part==null) {//兼容ueditor
part = request.getPart("upfile");
}
//Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
//获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
String header = part.getHeader("content-disposition");
//获取文件名
fileName = getFileName(header);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
//把文件写到指定路径
String fileTyle=fileName.substring(fileName.lastIndexOf("."),fileName.length());
saveName = format.format(new Date())+"_"+user.getId() + fileTyle;
fileSize = part.getSize();
part.write(savePath+File.separator+saveName);
}else {
//一次性上传多个文件
for (Part part : parts) {//循环处理上传的文件
//获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip"
if(part.getContentType()!=null){
String header = part.getHeader("content-disposition");
//获取文件名
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
fileName = getFileName(header);
String fileTyle=fileName.substring(fileName.lastIndexOf("."),fileName.length());
saveName = format.format(new Date())+"_"+user.getId() + fileTyle;
//把文件写到指定路径
part.write(savePath+File.separator+saveName);
fileSize = part.getSize();
}
}
}
System.out.println( System.getProperty("os.name").toLowerCase());
if(!System.getProperty("os.name").toLowerCase().contains("windows")) {
Runtime.getRuntime().exec("chmod 777 " + savePath+File.separator+saveName);
}
PrintWriter out = response.getWriter();
System.out.println(UUID.randomUUID());
JSONObject jsobject = new JSONObject();
jsobject.put("state", "SUCCESS");
jsobject.put("url", website+"/uploads/"+saveName);
jsobject.put("title", saveName);
jsobject.put("original", fileName);
jsobject.put("fileSize", fileSize);
Uploads u = new Uploads();
u.setUserId(user.getId());
u.setPid(0);
u.setName(fileName);
u.setPath(website+"/uploads/"+saveName);
u.setSize(fileSize);
u.setSort(0);
u.setTempId(tempId);
u.setType(0);
// UploadsDao.save(u);
out.println(jsobject.toString());
out.flush();
out.close();
}
}else {
this.doGet(request, response);
}
}
/**
* 根据请求头解析出文件名
* 请求头的格式:火狐和google浏览器下:form-data; name="file"; filename="snmp4j--api.zip"
* IE浏览器下:form-data; name="file"; filename="E:\snmp4j--api.zip"
* @param header 请求头
* @return 文件名
*/
public String getFileName(String header) {
/**
* String[] tempArr1 = header.split(";");代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别
* 火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}
* IE浏览器下:tempArr1={form-data,name="file",filename="E:\snmp4j--api.zip"}
*/
String[] tempArr1 = header.split(";");
/**
*火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}
*IE浏览器下:tempArr2={filename,"E:\snmp4j--api.zip"}
*/
String[] tempArr2 = tempArr1[2].split("=");
//获取文件名,兼容各种浏览器的写法
String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\")+1).replaceAll("\"", "");
return fileName;
}
}
配置好后就可以上传图片了,也可以直接复制图片或者截图,ctrl+v能直接复制到编辑器中,是不是很方便?