我现在已经在线搜索了一段时间(Google和StackOverflow),但还没有遇到过这个问题。也许我的查询不正确(请重定向!)
我在Linux下在TomCat 6上开发并设置了WebApp。 Tomcat还没有在虚拟主机环境中运行,我可以完全控制服务器。因此,.war文件将保存到Tomcat的标准部署目录中。我遇到的问题是图像:不同的Web服务提供不同大小的图像,需要以统一的大小呈现。
我下载它们并调整它们没有问题,但必须存储图像的本地副本,因为这需要一些时间,如果实时完成,加上大量的带宽浪费。我不会将它们保存在Tomcat下的.war的临时目录下,因为服务器关闭会迫使我重新加载所有图像。
我在/ home / username / images下创建了一个不同的目录,然后我通过常规Apache在不同的子域下提供服务,而.jsp中生成的HTML代码只是该文件的正确URL。如果图像不存在,效果很好。但是,由于权限问题,Tomcat实例无法删除或覆盖已创建的文件,即使我已使用777权限标记了存储图像的文件夹。顺便说一句,我认为不需要给它777烫发,但是755(例如),即使在尝试保存新文件时我也有权限问题。
所以:有没有更好的解决方案(我考虑过数据库,但图像目录现在是250mb,我认为没有必要过多地重载数据库)?
答案 0 :(得分:1)
不要将图像存储在数据库中。您的/home/user/www.example.com/resources方法是正确的方向,只需解决权限问题。确保该路径位于运行tomcat(tomcat?)的用户所属的组中,并减少777,因为它太宽。
答案 1 :(得分:1)
关于tomcat和其他用户是在写还是只有tomcat,还有点不清楚。
如果它只是tomcat,那么有问题的目录应该由tomcat拥有,权限可以是750(设置组以匹配apache的组)或755(组无关紧要,机器上的任何人都可以阅读文件。)
请注意,如果其他用户正在编写文件,则必须更加棘手。在这种情况下,您需要775,用户tomcat,组tomcat,并将其他用户放在tomcat组中。如果这些用户位于多个组中,则可以使用目录上的组粘滞位强制该组保留tomcat。在这种情况下,机器上的任何人都可以读取这些文件。
chown和chmod的文档应该会有很大的帮助。
(是的,我确实意识到这个问题已经过时了,但同样的原则适用,似乎没有人给出明确的答案)。
答案 2 :(得分:0)
权限具体发生了什么? Tomcat将作为一些用户标识(比如tomcat1)运行,并且将创建可能由同一用户(tomcat1)拥有的文件。如果您的文件是使用其他所有者创建的,那么这将解释为什么您无法覆盖现有下载,并且您需要找出所有权不同的原因。如果它不是所有权,则创建的文件是在没有用户写入权限的情况下创建的。在这种情况下,请考虑明确设置保存的每个文件的权限,以允许所有者写入,或更改用户帐户的umask。