KindEditor是一套开源的HTML可视化编辑器。集成了许多强大的功能,但是也有一些不足的地方。比如:上传图片时,是先上传图片到服务器,再插入到编辑框内。这样就会产生一个问题。如果用户先将图片插入到编辑器(这时已经将图片上传到服务器),用户又将图片从编辑框里删掉。这样最终用户上传的内容中就没有包含图片的路径,但是图片已经上传到服务器中,并没有因此而删除。这样就会造成资源的浪费,所以我们要自己对这种情况进行处理。
下面是解决这种情况的一种思路:
1、建立一个临时存放文件夹,存储用户刚开始上传的图片。并用一个变量存储用户上传的图片文件名(这里我用全局变量List)
2、用户提交内容时就判断内容里是否含有List中保存的图片文件名,有的话就将该文件转到正式文件夹,否则就将该图片文件从临时文件夹里删掉。
下面我用spring框架来写一个解决这种情况的例子:
首先写一个上传图片的控制器:
/**
* 上传图片
* @author Mike
* @since 2017-5-12
*/
@RequestMapping("/updatePhoto")
@ResponseBody
public Map<String, Object> uploadUserPhoto(@RequestParam(required = true) MultipartFile imgFile) {
Map<String,Object> map = newsManageService.uploadNewsPhoto(imgFile);
return map;
}
/**
* 添加内容
* @author Mike
* @param MContentNews类
* @since 2017-4-12
*/
@RequestMapping(value = "/addNews",method = RequestMethod.POST)
public String addNews(MContentNews mContentNews,Model model){
String result;
if(mContentNews.getLocationPc() == null){
mContentNews.setLocationPc(1);
}
//存入用户添加的内容
if(newsManageService.addNews(mContentNews) > 0){
result = "添加成功";
}else{
result = "添加失败";
}
//返回提示信息给用户
model.addAttribute("result", result);
return "redirect:/BLDAdmin/newsManage/showNews";
}
上传图片的service:
//上传图片
public Map<String, Object> uploadNewsPhoto(MultipartFile imageFile) {
Map<String, Object> map = new HashMap<>();
if (imageFile == null) {
map.put("success", false);
map.put("msg", "上传文件不能为空");
return map;
}
String fileType = imageFile.getOriginalFilename()
.substring(imageFile.getOriginalFilename().lastIndexOf(".") + 1);
if (!"JPG JPEG PNG BMP".contains(fileType.toUpperCase())) {
map.put("success", false);
map.put("msg", "文件格式有误,请上传图片(jpg,jpeg,png,bmp)文件");
return map;
}
if (imageFile.getSize() > Const.PICTURE_SIZE) {
map.put("success", false);
map.put("msg", "上传文件不能超过3M!");
return map;
}
//先存到临时文件夹
String fileRealPath = "D:/upload/temp";
// 执行上传
map = FileUtil.uploadFile(imageFile, fileRealPath);
if (map.get("success").equals(Boolean.TRUE)) {
map.put("msg", map.get("name") + "图片上传成功");
map.put("error",0);
map.put("url","D:/upload/temp" + map.get("newName"));
FileUtil.fileTempName.add((String)map.get("newName"));
}else {
map.put("msg", map.get("name") + "图片上传失败");
}
return map;
}
//添加内容
public int addNews(MContentNews mContentNews) {
for(String fileName : FileUtil.fileTempName){
//将缓存中的该文件上传到正式文件夹
if(mContentNews.getContent().contains(fileName)){
File fold = new File("D:/upload/temp/" + fileName);//原路径下的文件
File fnewpath = new File("/");//正式文件夹路径
if(!fnewpath.exists())
fnewpath.mkdirs();
File fnew = new File("D:/upload/image" + fold.getName());
fold.renameTo(fnew);
}else{//删除缓存中无用的该文件
String imagePath = "D:/upload/temp/"+fileName;
File imageFile = new File(imagePath);
imageFile.delete();
}
}
//清空fileTempName保存的文件名
FileUtil.fileTempName.clear();
return mContentNewsMapper.insertSelective(mContentNews);
}
最后要记得将List清空。
将一个文件夹中的文件转到另一个文件夹请参考博客http://blog.csdn.net/hero5460/article/details/4788361