linux下通过软连接实现访问项目路径外面的资源
在javaweb项目开发中,图片上传是个比较常见的场景。一般都是在项目路径下建个文件夹,然后上传到该文件夹下;这样这个图片就可以和静态资源一样被直接访问。这样的好处就是访问这图片特别方便;缺点是重新部署时要手动把图片备份,不然图片就丢失了。
今天通过在网上查阅一些资料,找到了如下2个方案:
(1)配置tomcat虚拟目录
- 该方案的好处是虚拟目录下的文件也可以类似于静态资源一样这样访问
- 美中不足的是上传图片还需要上传到虚拟目录的绝对路径,在网上没看到怎么获取虚拟目录的绝对路径的方法;个人想到的解决方案就是配置一个properties文件,里面放绝对路径。
(2)通过linux的软连接实现
- 该方案的好处就是可以和类似静态文件一样访问,上传就直接上传到项目根目录下的文件夹即可。和文章开头说的那种方案在代码上来说是一样的。
- 缺点是需用通过linux命令对上面项目根目录的上传文件夹做软连接,连接完之后上传的文件其实是上传到了软连接的文件夹去了。
- 还有个问题是需要配置tomcat支持软连接
一、软连接介绍
软连接命令:
ln -s 源文件 目标文件
1
ln -s 源文件 目标文件
二、实际案例
(1)代码中,我们把文件上传到项目路径(webRoot或者webapp)的下的images/ 文件夹中;这个上传怎么实现,不介绍。
(2)linux中的处理
- 在linux中建立一个名为images的文件夹。(这个文件夹名字要和你准备软连接的文件夹名字一样,这个文件夹的位置随便在那都可以,但是一般都在tomcat的外面。)
- 进入到tomcat下的部署好的项目路径下,创建软连接。源文件夹是上面创建的该文件夹,目标文件夹是后面我们上传的文件夹。
- 建立软连接后,可以测试上传文件,会发现文件上传后跑到tomcat外面的文件夹里面去了。但是用访问静态文件的方式现在还是访问不到,会报404。原因是tomcat默认不支持软连接,需要在conf/context.xml中开启。配置方法如下:
tomcat5、6、7版本:
<Context allowLinking="true" />
tomcat8、9版本:
<Context> <Resources allowLinking="true" /> </Context>
更多配置参考:http://www.cnblogs.com/wuxun1997/p/6769971.html
- 配置完后,就大功告成了。
更多软连接的案例可参考:http://blog.csdn.net/ggmmqq/article/details/8253570
http://www.cnblogs.com/wuxun1997/p/6769971.html
三、软连接的注意事项
(1)软连接的删除需要特别注意,具体可参考
http://www.cnblogs.com/cartsp/p/6437046.html
http://blog.csdn.net/zhenwenxian/article/details/16369767
(2)笔者发现eclipse的重新部署还是会把软连接的源目录下的文件删除,这个是个很奇怪的地方。不过运维人员重新部署肯定不是用eclipse的。所以不用担心。
(3)重新部署项目后,软连接需要重新建立
后续还有一篇介绍linux软连接的文章,推荐阅读。
作者:zeng1994
出处:http://www.cnblogs.com/zeng1994/
本文版权归作者和博客园共有,欢迎转载!但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接!