读书人

KindEditor下传图片有关问题

发布时间: 2013-03-22 09:49:50 作者: rapoo

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

KindEditor下传图片有关问题
 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的具体方法请看:

KindEditor下传图片有关问题
 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中加入:

KindEditor下传图片有关问题
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,这个无所谓喽,爱用神马用神马.
struts是支持json直接返回,但为什么我不用struts的json返回呢?这个就牵扯到ajax提交文件的方法了.然后你又想问:KindEditor怎么接受这个Json的?
图片上传我们不用考虑这个问题,应为在kindeditor.js中写好了,如果我们做附件上传插件的话就参考官方的图片上传来完成我们的附件上传插件!

好了,当你把配置文件都搞定了,部署重启tomcat吧!

如果这个搞不定那么附件上传就别想了.希望要使用的人仔细看下,这样做附件上传插件的时候就容易多了.


KindEditor插件之代码高亮