kindeditor图片上传 struts2实现(二)

2015-01-27 06:24:42 · 作者: · 浏览: 20
权限。")); return null; } String dirName = request.getParameter("dir"); if (dirName == null) { dirName = "image"; } if (!extMap.containsKey(dirName)) { out.println(getError("目录名不正确。")); return null; } // 创建文件夹 savePath += dirName + "/"; saveUrl += dirName + "/"; File saveDirFile = new File(savePath); if (!saveDirFile.exists()) { saveDirFile.mkdirs(); } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String ymd = sdf.format(new Date()); savePath += ymd + "/"; saveUrl += ymd + "/"; File dirFile = new File(savePath); if (!dirFile.exists()) { dirFile.mkdirs(); } FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request; // 获得上传的文件名 String fileName = wrapper.getFileNames("imgFile")[0];// imgFile,imgFile,imgFile // 获得文件过滤器 File file = wrapper.getFiles("imgFile")[0]; // 检查扩展名 String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); if (!Arrays. asList(extMap.get(dirName).split(",")).contains(fileExt)) { out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。")); return null; } // 检查文件大小 if (file.length() > maxSize) { out.println(getError("上传文件大小超过限制。")); return null; } // 重构上传图片的名称 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String newImgName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt; byte[] buffer = new byte[1024]; // 获取文件输出流 FileOutputStream fos; // 获取内存中当前文件输入流 InputStream in; try { fos = new FileOutputStream(savePath + "/" + newImgName); in = new FileInputStream(file); int num = 0; while ((num = in.read(buffer)) > 0) { fos.write(buffer, 0, num); } in.close(); fos.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 发送给 kindeditor JSONObject obj = new JSONObject(); obj.put("error", 0); obj.put("url", saveUrl + "/" + newImgName); out.println(obj.toJSONString()); return null; } private String getError(String message) { JSONObject obj = new JSONObject(); obj.put("error", 1); obj.put("message", message); return obj.toJSONString(); } } kindeditor有自带的jsp图片上传demo

uploadJson : '../jsp/upload_json.jsp'

但如果按照upload_json.jsp中的程序进行上传时执行到

List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {}
发现itr为空 取不到上传文件 故没有执行while循环,也就没有返回值,kindeditor报服务器错误.为什么取不到值,是因为:

struts2过滤访问jsp时,会改变reqeust的类型,由HttpServletRequest变成MultiPartRequestWrapper,所以parseRequest就返回了null

于是我们就需要对request进行转换

MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
这样就可以通过wrapper获取上传文件
String fileName = wrapper.getFileNames("imgFile")[0];
File file = wrapper.getFiles("imgFile")[0];

效果如图:
?楗??[??(h?楗?y源码:稍等,待上传