由于程序更新或升级的时候,需要保留上传的文件(通常是/uploads文件夹)。有时候会希望将上传的文件保存到程序之外的目录,以免更新程序的时候被覆盖。
实现这个功能需要解决两个问题,一是放到程序之外的/uploads文件夹要能够被浏览器访问;二是上传时,文件要保存到指定文件夹。
修改tomcat的server.xml里的Host、Context配置,可以实现程序之外的/uploads文件夹可访问。
<Host ...>
<Context path="/uploads" docBase="D:/other/dir/uploads" />
</Host>
本方法不支持图片加参数,如/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
。所以配置的时候要额外注意。
上述使用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:
前缀,后面接绝对路径,路径分割符号用/
。如果不带这个前缀,则以程序根目录作为起始路径。