springmvc MultipartFile 重复上传同一张图片ear.jpg 如何设置服务器不会增加这张图片

文件上传后 自动 生成 时间戳+随机码

但是 我的后台需要上传的图片有重复的 不想让他重新生成新的图片新的名字

控制器部分代码

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 图片上传
            MultipartFile left_img = multipartRequest.getFile("left_img");// 上传左图原文件
            MultipartFile right_img = multipartRequest.getFile("right_img");// 上传右图原文件不仅仅是名字
            FileUtil fileUtil = new FileUtil();
            String fileRoot = request.getSession().getServletContext().getRealPath("upload/handAcupoint");
            System.out.println("fileRoot:" + fileRoot);
            String type = multipartRequest.getParameter("type");
            String id = multipartRequest.getParameter("id1");
            String code = multipartRequest.getParameter("num");
            String name = multipartRequest.getParameter("name");
            String en_name = multipartRequest.getParameter("en_name");
            String pinyin = multipartRequest.getParameter("pinyin");
            String location = multipartRequest.getParameter("location");
            String left_x = multipartRequest.getParameter("left_x");
            String left_y = multipartRequest.getParameter("left_y");
            String right_x = multipartRequest.getParameter("right_x");
            String right_y = multipartRequest.getParameter("right_y");
            String zhuzhi = multipartRequest.getParameter("zhuzhi");
            String leftFileName = null;
            String rightFileName = null;
            String yleftName = null; // 原来左图片名字
            String yrightName = null;// 原来右图片名字
            String res = null;
            int code1 = Integer.parseInt(code);
            int right_x1 = Integer.parseInt("0" + right_x);
            int right_y1 = Integer.parseInt("0" + right_y);
            int left_x1 = Integer.parseInt("0" + left_x);
            int left_y1 = Integer.parseInt("0" + left_y);
            if (type.equals("0")) {// 添加手诊穴位信息
                leftFileName = fileUtil.saveImg(left_img, fileRoot, yleftName); // 左图
                rightFileName = fileUtil.saveImg(right_img, fileRoot, yrightName); // 右图
                int num = handDiagnosisService.saveHandAcupoint(code1, name, en_name, pinyin, location, leftFileName,
                        rightFileName, left_x1, left_y1, right_x1, right_y1, zhuzhi);
                if (num != 0) {
                    res = "1001";// 添加成功
                } else {
                    res = "1002";// 添加失败
                }
                OutputUtil.outPutString(response, res);

            }

上传类代码


 public class FileUtil {



    /**
     * 上传图片
     * @param imgFile 图片文件
     * @param fileRoot 目标地址
     * @param fileName 图片名称
     * @return
     * @throws IOException 
     * @throws IllegalStateException 
     */
    public String saveImg(MultipartFile imgFile,String fileRoot,String fileName) throws IllegalStateException, IOException{

            if(imgFile == null){
                return null;
            }

            File src = new File(fileRoot);
            if (!src.exists()) {
                src.mkdirs();
            }
            fileName = fileName==null?System.currentTimeMillis()+ new Random().nextInt(100000)+".jpg":fileName;
        /*  String fileName = System.currentTimeMillis()+ new Random().nextInt(100000)+".jpg"; //图片名
*/          File newFile = new File(src, fileName);

                imgFile.transferTo(newFile);      

            return fileName;
    }
}

这是图片 同一张图片重复好多次
图片说明

import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
public class FileDigest {
  /**
   * 获取单个文件的MD5值!
   * @param file
   * @return
   */
  public static String getFileMD5(File file) {
    if (!file.isFile()){
      return null;
    }
    MessageDigest digest = null;
    FileInputStream in=null;
    byte buffer[] = new byte[1024];
    int len;
    try {
      digest = MessageDigest.getInstance("MD5");
      in = new FileInputStream(file);
      while ((len = in.read(buffer, 0, 1024)) != -1) {
        digest.update(buffer, 0, len);
      }
      in.close();
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
    BigInteger bigInt = new BigInteger(1, digest.digest());
    return bigInt.toString(16);
  }

  /**
   * 获取文件夹中文件的MD5值
   * @param file
   * @param listChild ;true递归子目录中的文件
   * @return
   */
  public static Map<String, String> getDirMD5(File file,boolean listChild) {
    if(!file.isDirectory()){
      return null;
    }
    //<filepath,md5>
    Map<String, String> map=new HashMap<String, String>();
    String md5;
    File files[]=file.listFiles();
    for(int i=0;i<files.length;i++){
      File f=files[i];
      if(f.isDirectory()&&listChild){
        map.putAll(getDirMD5(f, listChild));
      } else {
        md5=getFileMD5(f);
        if(md5!=null){
          map.put(f.getPath(), md5);
        }
      }
    }
    return map;
  }


  public static void main(String[] args) {
    File file1 = new File("a.txt");
    File file2 = new File("b.txt");
    System.out.println(getFileMD5(file1).equals(getFileMD5(file2)));
  }
}

在服务器上的文件名字不重要,只要下载的时候设置下Content-Disposition为attachment;filename=你的文件名
用户就会得到原始文件的下载。

http://blog.csdn.net/u010627547/article/details/43986925

fileutil 里面 该如何做一下修改

楼主是想一张图片不让多次上传把

1、计算文件的 MD5 值,文件的MD5值可以代表一个文件的唯一标示,如果两个文件的MD5值相等,可以认为文件是一致的;
2、至于怎么计算文件的MD5值,网络上有很多,这里原谅我不能贴别人的东西上来。

同一张照片 重复上传 服务器上面不会增加重复

楼上给出的思路可以,计算后的值持久化到数据库,再次上传的时候,进行校验