将图像保存在文件系统而不是DB上

时间:2017-07-01 19:35:14

标签: spring-mvc spring-boot

我正在开发一个用户可以提供文本信息和图像的应用程序。我想在文件系统和数据库中保存图像,我将添加每个用户到其图像的链接所以我需要将用户ID添加到图像名称以不获取具有相同名称的图像。我正在使用SPRING MVC。 在我的控制器中:

@RequestMapping(value="/save",method=RequestMethod.POST)
    public String add ( @RequestParam("prix") Long prix, 
            RequestParam("adresse") String ville,
            @RequestParam("categorie") String categorie,
            @RequestParam("photos") MultipartFile file,
            ) throws FileNotFoundException


 {

   String chemin=null;
   if (!file.isEmpty())
     {
      try {
       String orgName = file.getOriginalFilename();
       // this line to retreive just file name 
       String 
       name=orgName.substring(orgName.lastIndexOf("\\")+1,orgName.length());
       chemin="e:\\images\\"+name;  //here I want to add id (auto generated)
       File file1=new File(chemin);
       file.transferTo(file1);
         } catch (IOException e) {
                                    e.printStackTrace();
                                  }

    }
    annonce.setImage(chemin);
    annonce.setTitre(prix);
    annonce.setCorps(ville);
    annonce.setPrix(cetegorie)
    annoncedao.save(annonce);
    return "SuccessAddAnnonce";
}

但是我无法得到ID女巫是自动生成的,所以我不能把它抛出@RequestParam像地址或类别,因为它是自动生成的,我仍然没有它,直到我们称为保存方法巫婆是最后一次。 欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

您可以为每个用户生成一个随机ID,并将其分配给特定用户,从而也将其图像名称(我想在此打算做)。

我将简单地说明一下。

// Get a random ID coressponding to the user address or whatever, here i will just use address

MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] hash = digest.digest(ville.getBytes("UTF-8"));

String randomId = DatatypeConverter.printHexBinary(hash);

// Here you have a uniqueID for an address.
// You could have just used ville.hashCode() also but it might give you collisions with some different Strings.

如果输入:" 64th Street,Downtown,StackOverFlow"然后

randomId = 8AB126F8EBC0F7B5CCBBEB3E21582ADF