spring-data-jpa 数据库设计-在哪里存储默认配置文件图片?

r6hnlfcb  于 2022-11-10  发布在  Spring
关注(0)|答案(3)|浏览(138)

请考虑ProfilePicture实体,例如:

@Entity
public class ProfilePicture {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private byte[] image;

  @OneToOne
  private Employee employee;
}

每个个人资料图片都与一个员工相关联-如果个人资料图片存在,则必须与一个员工相关联。但是,如果有一个员工没有个人资料图片,则完全可以。
现在,我想创建一个REST端点,它允许向给定的雇员ID请求配置文件图片。如果提供的雇员ID不存在配置文件图片,我想返回默认图片。
问题是,我不知道在哪里存储默认图片:我想把默认图片存储在我的个人资料图片数据库表中。但这是不可能的,因为每张图片都必须与一个雇员相关联,而默认图片却不是。我也不能在雇员数据库表中创建一个代表默认雇员的虚拟条目。因为我希望能够通过另一个REST调用来请求所有员工,而不希望每次都必须过滤掉这个空条目。
这应该是一个常见的问题,我想知道最好的解决方案。我可以创建一个额外的数据库表,只保存默认图片,但我真的不知道这是一个好主意。

cvxl0en2

cvxl0en21#

我会将图像存储在一个s3桶中,并使用一些属性文件来存储默认pfp的URL。
然后,您可以在应用程序启动时将默认的pfp url包含在初始响应中,如果当前用户不存在pfp,则只使用该url。
您可以使用MinIO之类的应用程序在本地模拟s3 bucket。
其他选项可能包括在某个“files”表中存储一个字节数组,或者让文件存在于服务器上,然后让API直接提取文件。

daolsyd0

daolsyd02#

我更喜欢将图像存储在AWS s3 bucket中,并使用s3路径,如s3://bucket-name/some-profile-id/picture.jpeg。
(It对于您的问题无关紧要,但SCNR)我还将为s3路径中的所有映像启用cloudfront enable。
对于默认图像,我可以在配置文件表中为这些用户分配默认路径。2存储图像也是可能的,因为你已经在实体中显示了。3但在未来,它将很难维护,并有cdn - cloudfront这样的快速访问将是非常困难的。

rjjhvcjd

rjjhvcjd3#

在数据库中以byte[]的形式存储图片总是不好的,因为这会使API变慢。相反,我建议将其存储在AWS S3或任何其他第三方存储服务中,并将图片URL存储在数据库中。
至于你的默认图片,你有很多选择来使用它i)包括默认的个人资料图片在你的资源文件夹,只有从那里得到它,如果用户没有提供任何图片给你。如果你这样做,那么同一张图片的多个副本将被存储在AWS S3或任何第三方存储服务。
ii)将默认图片放到AWS S3并获取图片的URL。当用户没有提供任何图片时,您可以使用该URL。
对于REST端点,您可以使用form-data来读取Request主体以及MultipartFile形式的图像。

相关问题