1
私は春に新しく、メンバーのプロフィール画像を保存したいと思います。私はロンボクとJPAを使用しています。ファイル名に@GeneratedValue IDの画像を保存するにはどうすればよいですか?
@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();
}
私はすべてのデータを1つのPOSTを期待しています。画像はbasic64でエンコードされた文字列として送信されますが、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が生成された後で、後でこのメソッドを呼び出す方法はありますか?あるいは、この問題を解決するために別の方法を選択する必要がありますか?この問題を解決するためのチュートリアルや質問はありませんでした。
あなたは実体が保存された後、ディスクにイメージを書き込むためにインターセプタを使用することができます。 http://blog.janjonas.net/2010-02-17/hibernate-interceptor-update-entity-property-on-update-on-saveを参照してください。 – ericbn