在笔者的上一篇文章介绍过怎么通过linux的软连接在不修改上传代码的情况下,将上传到项目路径下的图片改为上传到项目外面,防止重新部署后图片被删除了。同时还可以直接通过类似访问静态资源的方式访问图片。但是,笔者发现一个问题;如果运维人员在重新部署后忘记做软连接,那么图片就上传到项目路径下了。如果再重新部署,这部分图片就丢失,这就是一个bug。
为了解决这个文件丢失问题,我们将图片上传到一个项目外面的绝对路径,这样就不会在忘记做软连接的时候丢失了。对于怎么访问这个文件呢,还是和上一篇文章一样,做个软连接就可以。
下面通过一个案例来解释下
一、实战案例
(1)上传代码
这个上传没啥说的,只不过是要上传到一个绝对路径下面。比如我们原来是上传到项目的/images/packing/下;
现在我们在tomcat外面建一个文件夹,如:/home/tomtop1927/test/ 这样这个test就相当于我们的原来项目根目录了。在我们上传完之后,图片的真实地址类似于:/home/tomtop1927/test/images/packing/100_abc.jpg 。
![1222688-20170913112023125-1411515989.png](https://i-blog.csdnimg.cn/blog_migrate/67b7730d5bec0bb74a758e70f75483d9.png)
其实这个绝对地址是不应该写死的,最好是通过properties去读取最好。对于上传的代码就不介绍了。
(2)建立软连接
注意:现在test文件夹下面没有imges这个文件夹,可以先自己手动建立一个,然后再进入我们项目路径建立软连接。
![1222688-20170913112025594-923800839.png](https://i-blog.csdnimg.cn/blog_migrate/987cd59073f0d9d59502dd521cd612cb.png)
其实这个建立软连接和上一篇文章是一样的,没什么区别,之所以介绍就是这步比较重要。
(3)tomcat配置开启软连接
怎么开启不介绍,见上一篇文章。笔者用的tomcat8,所以con/context.xml配置<Resources allowLinking="true"/>
(4)完成
通过上面的3步就完成了,我们把图片上传到了项目外面的一个绝对路径上,这样假设运维人员忘记配置软连接,上传也不受影响。就是访问这文件的时候受影响,当访问不了的时候,运维人员配置个软连接就ok了。总之保证了文件不丢失。
二、对比
这里的对比是和我上一篇博客介绍的软连接的对比
(1)上一篇博客中上传代码是完全就和上传到项目根目录下的代码一样。而本次上传的代码需要把图片存的位置的真实的绝对路径给写到代码中。
(2)除了上面说的代码不一样外,其他操作均一样。
(3)本篇博客介绍的这方案的优点是:上传永远不会出问题,即使忘记软连接,也还是上传到放文件的地方。
缺点是:这个绝对路径得写到代码里,虽然可以通过配置properties的方式来解耦,但是变更路径时需要运维人员去修改。