在笔者的上一篇文章介绍过怎么通过linux的软连接在不修改上传代码的情况下,将上传到项目路径下的图片改为上传到项目外面,防止重新部署后图片被删除了。同时还可以直接通过类似访问静态资源的方式访问图片。但是,笔者发现一个问题;如果运维人员在重新部署后忘记做软连接,那么图片就上传到项目路径下了。如果再重新部署,这部分图片就丢失,这就是一个bug。
    为了解决这个文件丢失问题,我们将图片上传到一个项目外面的绝对路径,这样就不会在忘记做软连接的时候丢失了。对于怎么访问这个文件呢,还是和上一篇文章一样,做个软连接就可以。
    下面通过一个案例来解释下

一、实战案例

(1)上传代码
        这个上传没啥说的,只不过是要上传到一个绝对路径下面。比如我们原来是上传到项目的/images/packing/下;
    现在我们在tomcat外面建一个文件夹,如:/home/tomtop1927/test/  这样这个test就相当于我们的原来项目根目录了。在我们上传完之后,图片的真实地址类似于:/home/tomtop1927/test/images/packing/100_abc.jpg 。    
        
        其实这个绝对地址是不应该写死的,最好是通过properties去读取最好。对于上传的代码就不介绍了。
(2)建立软连接
        注意:现在test文件夹下面没有imges这个文件夹,可以先自己手动建立一个,然后再进入我们项目路径建立软连接。

        其实这个建立软连接和上一篇文章是一样的,没什么区别,之所以介绍就是这步比较重要。
(3)tomcat配置开启软连接
           怎么开启不介绍,见上一篇文章。笔者用的tomcat8,所以con/context.xml配置<Resources allowLinking="true"/>
(4)完成
        通过上面的3步就完成了,我们把图片上传到了项目外面的一个绝对路径上,这样假设运维人员忘记配置软连接,上传也不受影响。就是访问这文件的时候受影响,当访问不了的时候,运维人员配置个软连接就ok了。总之保证了文件不丢失。

二、对比

        这里的对比是和我上一篇博客介绍的软连接的对比
    (1)上一篇博客中上传代码是完全就和上传到项目根目录下的代码一样。而本次上传的代码需要把图片存的位置的真实的绝对路径给写到代码中。
    (2)除了上面说的代码不一样外,其他操作均一样。
    (3)本篇博客介绍的这方案的优点是:上传永远不会出问题,即使忘记软连接,也还是上传到放文件的地方。
         缺点是:这个绝对路径得写到代码里,虽然可以通过配置properties的方式来解耦,但是变更路径时需要运维人员去修改。
 

 

 



linux下使用软连接之案例二的更多相关文章

  1. linux下Oracle11g RAC搭建(二)

    linux下Oracle11g RAC搭建(二) 一.安装前配置 网络的配置 IP占用測试 进入windows下.运行cmd,使用ping命令验证网段是否被占用. 注:用哪个网段都行,一定保证不要被其 ...

  2. linux下oracle11G DG搭建(二):环绕主库搭建操作

    linux下oracle11G DG搭建(二):环绕主库搭建操作 环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本号 RedHat Enterprise5.5.Oracle 11g 1 ...

  3. linux下通过软连接实现访问项目路径外面的资源

            在javaweb项目开发中,图片上传是个比较常见的场景.一般都是在项目路径下建个文件夹,然后上传到该文件夹下:这样这个图片就可以和静态资源一样被直接访问.这样的好处就是访问这图片特别方 ...

  4. Linux下的软连接和硬链接

    由于教学上的原因,需要下载Android源码,后来使用repo时,系统提示需要python2,我的系统中是两个都有的,但是默认是python3,无法下载,通过创建了个链接搞定,下面就来说说linux下 ...

  5. LInux下桥接模式详解二

    上篇文章导入博客园的比较早,而这篇自己在写的时候才发现内部复杂的很,以至于没能按时完成,造成两篇文章的间隔时间有点长! 话不多说,言归正传! 前面的文章介绍了桥接模式下的基础理论知识,其实本节想结合L ...

  6. Linux SendMail发送邮件失败诊断案例(二)

    Linux上Sendmail经常由于一些配置问题,导致邮件发送失败,下面整理.收集了一些邮件发送失败.异常的案例. 案例1:在新服务器上测试sendmail发送邮件时,发现邮件发送不成功,检查/var ...

  7. Linux下的Backlight子系统(二)【转】

    转自:http://blog.csdn.net/weiqing1981127/article/details/8515847 版权所有,转载必须说明转自 http://my.csdn.net/weiq ...

  8. Linux下文件误删除恢复案例

    说明:将/etc/profile文件删除,然后恢复 在linux中为什么讲文件删除还能恢复呢? 详见:文件删除原理 http://blog.csdn.net/grantlee1988/article/ ...

  9. Linux下Nginx的安装(二)

    一.安装Nginx ## 安装前准备 ## #GNU编译器集合 #Nginx编译需要PCRE #在Nginx的各种模块中需要使用gzip压缩 #在Nginx中,如果服务器提供安全网页时则会用到Open ...

随机推荐

  1. Python数据类型之dict和set

    Python内置了字典:dict的支持.在其他语言中也成为map,使用键-值(key-value)存储,具有极快的查找速度. 把数据放入dict的方法,除了初始化时指定外,还可以通过key放入. 由于 ...

  2. SSM整合配置文件的主要内容

    web.xml: <servlet> <setvlet-name>springMVC</setvlet-name> <!-- 配置前端控制器 --> & ...

  3. Prometheus Node_exporter 之 FileSystem Detail

    FileSystem Detail /proc/filesystems 1. Filesystem space available type: GraphUnit: bytesLabel: Bytes ...

  4. IIS日志导致磁盘被占满

    某服务器只部署了个IIS,应用目录都在D盘,可C盘97.5GB空间却被占满了. 将系统文件,隐藏文件全部显示,再选中所有的C盘文件及文件夹查看容量只有19GB. 既然只部署了IIS,那自然就怀疑到了I ...

  5. 【Git】从服务器搭建到提交分支使用——初学者轻松上手篇

    GitHub就是一个免费托管开源代码的远程仓库,个人可以把代码寄存处上面,不过会被公开.对于商业公司来说在Linux上搭建一台Git服务器作为私有仓库使用.开发人员在本地下载仓库代码,协同开发.本篇介 ...

  6. Mysql binlog 无法删除(purge命令无法删除)

    1.版本 1)操作系统 cat /etc/issueCentOS release 6.6 (Final)Kernel \r on an \m cat /proc/versionLinux versio ...

  7. ndk的注意事项

    从开源网站下载的源码,需要自己编译c源码成so类库.当时用Android studio 运行总是报错"finished with non-zero exit value 2"报错定 ...

  8. linux stat 简单介绍

    stat 命令查看文件或文件系统的状态时间等属性 用法:stat [参数]... 文件... 简单的介绍一下stat命令显示出来的文件其他信息: - File:显示文件名 - Size:显示文件大小 ...

  9. 【待补充】[Python_1] Python 安装

    0. 说明 安装教程网上有很多,等下次安装再补充笔记 Python 下载地址

  10. MySQL基础之 排序与限制,聚合

    排序与限制 ORDER BY 作用:取出按照某个字段进行排序后的记录结果集. 配合:常与DESC  和ASC一块使用:默认是ASC,表示升序.DESC表示降序 LIMIT 作用:用于显示数据的一部分记 ...