Spring中使用kindeditor上传图片时遇到的问题

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;
	}	


添加内容的service:

//添加内容
	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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值