将上传文件放到程序之外的目录

2018-04-23 16:27 阅读

由于程序更新或升级的时候,需要保留上传的文件(通常是/uploads文件夹)。有时候会希望将上传的文件保存到程序之外的目录,以免更新程序的时候被覆盖。

实现这个功能需要解决两个问题,一是放到程序之外的/uploads文件夹要能够被浏览器访问;二是上传时,文件要保存到指定文件夹。

修改tomcat配置

修改tomcat的server.xml里的Host、Context配置,可以实现程序之外的/uploads文件夹可访问。

<Host ...>
    <Context path="/uploads" docBase="D:/other/dir/uploads" />
</Host>

修改weblogic配置(暂不适用)

本方法不支持图片加参数,如/uploads/abc.jpg可以访问,/uploads/abc.jpg?d=123则不能访问。这有可能是weblogic的bug,以后版本可能会修复,故将本方法也保留在此。

修改/WEB-INF/weblogic.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    ...
    <virtual-directory-mapping>
        <local-path>/home/weblogic/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/webshare/jspxcms</local-path>
        <url-pattern>/uploads/*</url-pattern>
    </virtual-directory-mapping>
    ...
</weblogic-web-app>

这里要注意,访问/uploads/abc.jpg是访问.../webshare/jspxcms/uploads/abc.jpg,而不是.../webshare/jspxcms/abc.jpg。所以配置的时候要额外注意。

WebLogic部署uploads应用

上述使用virtual-directory的方式有缺陷,不可用。因此需要专门部署一个uploads应用。

uploads应用很简单,部署在/home/weblogic/Oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/webapps/uploads

里面只需要一个/WEB-INF/weblogic.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    <context-root>/uploads</context-root>
</weblogic-web-app>

修改附件发布点

商业版的发布点功能可以实现将上传文件保存至指定文件夹。

点击后台导航系统管理 - 发布点,修改附件默认发布点

将保存路径修改为指定文件夹,如:file:D:/other/dir/uploads(linux系统不需要盘符,如file:/mydata/dir/uploads)。注意file:前缀,后面接绝对路径,路径分割符号用/。如果不带这个前缀,则以程序根目录作为起始路径。

咨询
交流群
电话