bulidfer 2016-10-25 09:33 采纳率: 0%
浏览 5403
已结题

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

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

  • 写回答

8条回答 默认 最新

  • 半杯凉月 2016-10-26 00:18
    关注
    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)));
      }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题