KindEditor上传图片问题
那么action类属性就应当为:

1 private File imgFile; 2 /** 3 * 文件名称 4 */ 5 private String imgFileFileName; 6 7 /** 8 * 图片宽度 9 */10 private String imgWidth;11 12 /**13 * 图片高度14 */15 private String imgHeight;16 17 /**18 * 图片对齐方式19 */20 private String align;21 22 /**23 * 图片标题24 */25 private String imgTitle;
其他的属性还是和原来action中的写法一样,哪里不一样呢?再给菜鸟补下课:
取文件名的话你的属性要这么写:页面file对象的name+FileName
取文件类型的话你的属性要这么写:页面file对象的name+ContentType
别忘了你的getter\setter方法!!!要不然你真死了都拿不到值!(纯属废话,我咋那么多废话?)
action的具体方法请看:

1 public String uploadImg() { 2 3 response.setContentType("text/html; charset=UTF-8"); 4 // 文件保存目录路径 5 String savePath = ServletActionContext.getServletContext().getRealPath("/") +"attached/"; 6 // 文件保存目录URL 7 String saveUrl = request.getContextPath() +"/attached/"; 8 // 定义允许上传的文件扩展名 9 String[] fileTypes =new String[] { "gif", "jpg", "jpeg", "png", "bmp" };10 // 最大文件大小11 long maxSize = getMaxSize(Constant.FILE_SIZE_IMG);12 PrintWriter out =null;13 try {14 out = response.getWriter();15 } catch (IOException e1) {16 log.error(e1);17 }18 19 if (imgFile ==null) {20 out.println(getError("请选择文件。"));21 returnnull;22 }23 24 // 检查目录25 File uploadDir =new File(savePath);26 if (!uploadDir.isDirectory()) {27 out.println(getError("上传目录不存在。"));28 returnnull;29 }30 // 检查目录写权限31 if (!uploadDir.canWrite()) {32 out.println(getError("上传目录没有写权限。"));33 returnnull;34 }35 // 创建文件夹36 SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMdd");37 String ymd = sdf.format(new Date());38 savePath += ymd +"/";39 saveUrl += ymd +"/";40 File dirFile =new File(savePath);41 if (!dirFile.exists()) {42 dirFile.mkdirs();43 }44 String fileExt = imgFileFileName.substring(imgFileFileName.lastIndexOf(".") +1).toLowerCase();45 if (!Arrays.<String> asList(fileTypes).contains(fileExt)) {46 out.println(getError("上传文件扩展名["+ fileExt +"]是不允许的扩展名。"));47 returnnull;48 }49 if (imgFile.length() > maxSize) {50 out.println(getError("[ "+ imgFileFileName +" ]超过单个文件大小限制,文件大小[ "+ imgFile.length() +" ],限制为[ "+ maxSize +" ] "));51 returnnull;52 }53 SimpleDateFormat df =new SimpleDateFormat("yyyyMMddHHmmss");54 String newFileName = df.format(new Date()) +"_"+new Random().nextInt(1000) +"."+ fileExt;55 File uploadedFile =new File(savePath, newFileName);56 try {57 FileUtil.Copy(imgFile, uploadedFile);58 JSONObject obj =new JSONObject();59 obj.put("error", 0);60 obj.put("url", saveUrl + newFileName);61 log.debug(obj);62 out.println(obj.toString());63 log.debug("上传图片:["+ uploadedFile.getName() +"]"+">>>["+ newFileName +"]成功");64 } catch (IOException e) {65 log.error("图片上传失败:"+ e);66 }67 returnnull;68 }69 private String getError(String message) {70 JSONObject obj =new JSONObject();71 obj.put("error", 1);72 obj.put("message", message);73 log.debug(obj);74 return obj.toString();75 }然后你问我:getMaxSize(Constant.FILE_SIZE_IMG);哪来的,不好意思我有个配置文件里放的图片文件限制大小.
如果你想上传2M的文件那么就应当为:2*1024*1024
FileUtil.Copy(imgFile, uploadedFile);同理,就是个拷贝文件的方法而已没有什么大不同,这里还牵扯到文件上传的一个经典问题!
有人说临时文件没有删掉或struts报临时文件的错误.别急一会一起解决掉!
如果你写到这就着急的运行鸟,那么你伤心的看着404页面吧....
最后一步:配置struts
1.记得我们刚才改action的访问后缀了吗?继续在刚才的struts.properties中加入:

1 ### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data2 # struts.multipart.parser=cos3 # struts.multipart.parser=pell4 struts.multipart.parser=jakarta5 # uses javax.servlet.context.tempdir by default6 struts.multipart.saveDir=c:\\temp7 # -1 nolimit8 struts.multipart.maxSize=-1
最后一个是上传文件大小,因为我们在action中配置的,所以这里就直接不限制了.默认2M
中间的是临时文件存放目录,我们随便配吧,默认空所以就跑到你的tomcat下了.
第一个...你想让我解释嘛?我X你!X完了就告诉你,那个是说你用什么组件来实现上传功能!支持commons-fileupload就是默认的jakarta,cos很出名,另一个偶土了没听说过.
然后我们忘了我们的action还没有配置呢!
<action name="onUploadImg" method="uploadImg"></action>
我直接指定method方法了...当然你也可以直接默认execute...随你,最基础的东西.
说明下:json返回的时候用的是字符串返回的,并且没有使用官方DEMO的json_simple-1.1.jar,使用的是常用的jsonplugin-0.34.jar,这个无所谓喽,爱用神马用神马.