在spring下使用百度编辑器ueditor

2 篇文章 0 订阅

在下觉得ueditor真麻烦。由于项目中使用了spring框架,配置了multipartResolver。导致ueditor的BinaryUploader方法失效,所以BinaryUploader保存文件的方法需要修改为下述代码:

package com.baidu.ueditor.upload;

import com.baidu.ueditor.PathFormat;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.FileType;
import com.baidu.ueditor.define.State;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest;


public class BinaryUploader {

    public static final State save(HttpServletRequest request,
            Map<String, Object> conf) {
//      FileItemStream fileStream = null;
        boolean isAjaxUpload = request.getHeader( "X_Requested_With" ) != null;

        if (!ServletFileUpload.isMultipartContent(request)) {
            return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);
        }

        ServletFileUpload upload = new ServletFileUpload(
                new DiskFileItemFactory());

        if ( isAjaxUpload ) {
            upload.setHeaderEncoding( "UTF-8" );
        }

        try {
//          FileItemIterator iterator = upload.getItemIterator(request);
            DefaultMultipartHttpServletRequest d = (DefaultMultipartHttpServletRequest) request;
            MultiValueMap<String, MultipartFile> multiFileMap = d.getMultiFileMap();
            for (Map.Entry<String, List<MultipartFile>> multipartFile : multiFileMap.entrySet()) {
                for (MultipartFile curFile : multipartFile.getValue()) {
                    String name = curFile.getName();
                    InputStream inputStream = curFile.getInputStream();
                    String originFileName = curFile.getOriginalFilename();
                    int i=0;
                    String savePath = (String) conf.get("savePath");

//                    String originFileName = fileStream.getName();
                    String suffix = FileType.getSuffixByFilename(originFileName);

                    originFileName = originFileName.substring(0,
                            originFileName.length() - suffix.length());
                    savePath = savePath + suffix;

                    long maxSize = ((Long) conf.get("maxSize")).longValue();

                    if (!validType(suffix, (String[]) conf.get("allowFiles"))) {
                        return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);
                    }

                    savePath = PathFormat.parse(savePath, originFileName);

                    String physicalPath = (String) conf.get("rootPath") +"WEB-INF"+ savePath;

                    InputStream is = inputStream;
                    State storageState = StorageManager.saveFileByInputStream(is,
                            physicalPath, maxSize);
                    is.close();

                    if (storageState.isSuccess()) {
                        storageState.putInfo("url", PathFormat.format(savePath));
                        storageState.putInfo("type", suffix);
                        storageState.putInfo("original", originFileName + suffix);
                    }

                    return storageState;
                }
            }
        } catch (Exception e) {
            return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
        }
        return new BaseState(false, AppInfo.IO_ERROR);
    }

    private static boolean validType(String type, String[] allowTypes) {
        List<String> list = Arrays.asList(allowTypes);

        return list.contains(type);
    }
}

ueditor的config.json需要包含对应的jsp配置文件,官方demo默认是controller.jsp,我这边处理是新建了一个控制器重新导到该配置文件


    @RequestMapping(value = "/um/upload/v2", method = {RequestMethod.GET, RequestMethod.POST})
    public String umUploadV2(HttpServletRequest request) {
        return "/um/controller";
    }

ueditor.config.js配置serverUrl:”/ajax/file/um/upload/v2”;
还有一些细小的bug出现在ueditor自带的java文件ActionEnter需要debug跟一下,聪明的你自然是会的。下次再见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值