百度编辑器ueditor如何配置文件上传,Java代码实现

当编辑器界面出来时,你是不是很开心,但是你想上传图片的时候就发现如下图

文件上传是不可用的,这是因为后端的路径没有配置正确,这个时候需要修改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能直接复制到编辑器中,是不是很方便?

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值