这个问题可能很愚蠢,但我真的没有看到如何解决它: 免得说在我的应用程序中,我有一个用户。此用户编辑他的个人资料,需要编辑他的头像。
我应该在哪里存储头像文件? 首先,我将所有文件保存在src \ main \ webapp \ resources中,但每次重新部署该文件夹都会清空。
所以我决定放在另一个位置:c:\ wwwdir \ resources,but i can't link local resources from remote pages,所以我无法显示任何头像。
任何想法?建议?链路?
答案 0 :(得分:7)
在提出解决方案之前需要考虑的事项:
对于未横向缩放的webapp,您可以将文件系统用作图像存储。这很简单,易懂,而且有效。
对于横向缩放的webapp,您需要将图像存储在每个servlet容器可以到达的位置。这可能是一个数据库(我不推荐这个),S3(我推荐这个),或者一个内容库(我从未使用过其中一个)。 S3的一个优点是它可以很好地扩展。您可以将它放在CloudFront(亚马逊的CDN)之后,或者只是服务器脱离S3并保持服务器的负载。
您还在提问中提到您无法从远程客户端提供本地资源。这是正确的,有点......我猜你正在尝试使用像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
}
答案 1 :(得分:3)
如何创建一个servlet,从您存储本地资源的任何地方读取本地资源,然后将其作为适当的内容类型流回来?因此,<img src="/resources/xyz.jpg"/>
代替<img src="/resourceservlet?id=xyz.jpg"/>
,而不是{{1}}。因此,您可以根据需要将文件存储在C:\ wwwdir \ resources文件夹中。
在网上搜索“java image servlet”会给你一些关于如何执行此操作的链接。您可以使用其中一个custom servlets或另一个响应中提到的使用框架的工具(如Spring)来构建。
您还可以考虑在Amazon S3中存储此类图形,但我不知道您正在构建的内容的规模。让servlet就位后,您可以移动内容而无需重做页面链接。
答案 2 :(得分:0)
尝试像Alfresco或Jackrabbit
这样的Java内容存储库答案 3 :(得分:0)
普通老MySQL怎么样?
头像的另一个选择是使用gravatar.com(或类似的东西)。这种方法比将头像保留在内部更加现代和有效。