如何在文件名中存储@GeneratedValue id的图像?

时间:2016-04-25 18:48:23

标签: java spring jpa

我是Spring新手,我想为会员保存个人资料图片。我正在使用lombok和JPA。

@Data
@Entity
public class Member {

    private @Id @GeneratedValue Long id;
    private String firstname;
    private String lastname;
    private Date entryDate;
    private String shortDescription;
    private String function;
    private String picture;

    protected Member() {
        this.entryDate = new Date();
    }

我希望一个POST包含所有数据。 Picture将作为basic64编码的String发送,但在DB中只应存储一个指向图像的链接。为了找到并识别每个成员的正确图片,我想用生成的id命名它们。这就是我已经做过的事情:

public void setPicture(String picture){
    File folder = new File("images");
    if(!folder.exists()){
        folder.mkdir();
    }
    String[] base = picture.split(",");
    String[] type = base[0].split("/|;");
    this.picture = "images/" + id + "." + type[1];
    try {
        byte[] imageByte = Base64.getDecoder().decode(base[1]);
        new FileOutputStream(this.picture).write(imageByte);
    } catch(Exception e){
        e.printStackTrace();
        //TODO: what is best practice here?
        this.picture = "images/default.jpg";
    }
}

我的问题是此时的id不存在。有没有办法在以后生成id后调用此方法,还是应该选择其他方法来解决此问题?我没有找到解决这个问题的任何教程或问题。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是使用它:

entityManager.persist(member);
member.setPicture("pictureString");
entityManager.merge(member);