Google 微软 Apple 无人驾驶 Java 人工智能 大数据 阿里巴巴 特斯拉 Facebook VR/AR 安全 手机 亚马逊 机器人 云计算

Tomcat基于Nginx负载上传文件解决方案

解决方案思路:

多个应用程序共享文件目录。

实现路径:

1.Tomcat 虚拟共享目录设置

Server.xml中的Host节点添加如下节点,

<Context path=”/res” docBase=”E:\WebServer\apache-tomcat-8.5.34\res” reloadable=”true” debug=”0″ crossContext=”true”/>

path为web URL刚问路径,docBase为共享目录的文件的路径。

2.应用中代码需要支持虚拟目录上传,虚拟目录上传时候需要传到docBase目录。

代码样例如下(兼容本地和虚拟目录):

属性文件中添加配置(当不设置时默认为本地):

Global.DOC_SHARE_BASE=E:\\WebServer\\apache-tomcat-8.5.34

 

然后绑定该属性配置到DOC_SHARE_BASE。

上传路径处理代码:

public static String getAbsoluteDiskPath(String path, HttpServletRequest request) {
    if (request == null) request = CommUtil.getHttpServletRequest();

    if (StringUtils.isNotEmpty(DOC_SHARE_BASE)) {//如果设置了共享目录则上传到共享目录
        return DOC_SHARE_BASE + path;
    } else {//如果没设置 则传到站内
        return request.getServletContext().getRealPath(path);
    }
}


3.代码中所有需要上传功能中的路径都要通过2处理路径即可访问到文件。

通过这样的方式实现了一个目录多个应用程序的共享,彻底解决了由Nignx负载均衡带来的文件上传导致其他服务无法访问的问题。

点赞 0 打赏

我要评论