在下觉得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跟一下,聪明的你自然是会的。下次再见