最近做新闻系统,用了kindeditor,其中上传图片的功能没有Java版的,自己修改了下并实现它,记录下来,备忘。
我一般不是很赞同修改别人的源代码,尤其是这种开源的,否则移植性很差火,所以尽量修改最少。
1、修改../plugins/image.html文件
把form提交的地址改成action的地址。其余的不变
2、实现action,获得上传文件,并保存文件到相应目录,然后返回时注意是HTML代码,要调用kindeditor中的插入图片和关闭层的函数,其实就是一个函数,action代码如下:
Code
1 /*
2 * 上传图片
3 */
4 @SuppressWarnings("deprecation")
5 public String inputimage() throws Exception {
6 String imagename = getImgFileFileName();
7 imagename = FormatConstants.DATE_TIME_FORMAT_IMAGE.format(DateUtils
8 .getCurrentDateTime())
9 + imagename.substring(imagename.lastIndexOf("."), imagename
10 .length());
11 try {
12 String newPath = getRequest().getRealPath("")
13 + "\\upload\\articleimage\\" + imagename;
14 copy(imgFile, newPath);
15 addActionMessage("保存成功!");
16 } catch (Exception e) {
17 logger.error(e.getMessage(), e);
18 addActionError("保存失败!");
19 return "imageinput";
20 }
21 String id = "content1";
22 String url = "http://" + getRequest().getServerName() + ":"+ getRequest().getServerPort() + "/upload/articleimage/"
23 + imagename;
24 String title = "100";
25 String width = "100";
26 String height = "100";
27 String border = "0";
28 return renderHtml(("<script type=\"text/javascript\">parent.KE.plugin[\"image\"].insert(\""
29 + id
30 + "\",\""
31 + url
32 + "\",\""
33 + title
34 + "\",\""
35 + width
36 + "\",\"" + height + "\",\"" + border + "\");</script>"));
37 }
38
39 /**
40 * 拷贝文件
41 *
42 * @param upload文件流
43 * @param newPath新文件路径和名称
44 * @throws Exception
45 */
46 private void copy(File upload, String newPath) throws Exception {
47 FileOutputStream fos = new FileOutputStream(newPath);
48 FileInputStream fis = new FileInputStream(upload);
49 byte[] buffer = new byte[1024];
50 int len = 0;
51 while ((len = fis.read(buffer)) > 0) {
52 fos.write(buffer, 0, len);
53 }
54 fos.close();
55 fis.close();
56 }
以上代码是ss3ex中的写法。其中图片宽,高度等我懒得获取值,简单的附了初始值。
备注:关于文章系统的设计思路,开始一直在琢磨图片和文章的关联,最后决定放弃一切关系,图片的路径就放在文章的内容里,基本与文章没得关系。优点是,少个个图片表的维护,缺点是,图片只能增不能删,删除图片时只能手工删除了,好歹我把图片的名字设置成日期格式了。
如果真的要实现删除图片的话,也好办,找到文章的创建日期,根据日期来删除图片,目前只想到整天整天的删。