在java web应用程序中,我应该在哪里存储用户照片?

sto*_*ter 2 design-patterns spring-mvc

这个问题可能是愚蠢的,但我真的没有看到如何解决它:免得说在我的应用程序中,我有一个用户.此用户编辑他的个人资料,并需要编辑他的头像.

我应该在哪里存储头像文件?首先,我将所有文件保存在src\main\webapp\resources中,但每次重新部署该文件夹时都会清空.

所以我决定放在另一个位置:c:\ wwwdir\resources,但我无法从远程页面链接本地资源,所以我无法显示任何头像.

任何的想法?建议?链接?

thr*_*ups 7

在找到解决方案之前需要考虑的事项:

  • 你会横向扩展你的webapp(即你将运行多个servlet容器实例).
  • 你期待什么样的流量?
  • 图像需要多快更新(即,在用户更改其头像之后,他们和所有其他用户是否应立即看到新头像).

对于未横向缩放的Web应用程序,您可以将文件系统用作图像存储.这很简单,易懂,而且有效.

对于水平扩展的webapp,您需要将图像存储在每个servlet容器可以到达的位置.这可能是一个数据库(我不推荐这个),S3(我推荐这个),或者一个内容库(我从未使用过其中一个).S3的一个优点是它可以很好地扩展.您可以将它放在CloudFront(亚马逊的CDN)之后,或者只是服务器脱离S3并保持服务器的负载.

您还在提问中提到您无法从远程客户端服务器本地资源.这是正确的,有点......我猜你正在尝试使用某些URL file://c:/.../image.jpg.这不行.您需要做的是映射处理程序以提供图像.这可能看起来像

@RequestMapping(value = "/image/{name}.jpg", method = RequestMethod.GET)
public void image(@PathVariable("name") String name, HttpServletResponse response) {
    // Read the image from the file system using java.io
    // Write the image to the response output stream
    // Even better use org.springframework.utils.FileCopyUtils
}
Run Code Online (Sandbox Code Playgroud)