问题分析:如果将图片上传到服务器的tomcat下的目录作为上传保存图片的路径,则每次更新程序重启tomcat时,都需要进行用户上传图片的备份和恢复。否则将被删除掉。
解决方法:通过配置Tomcta的虚拟路径,即将请求映射到实际的物理路径下,实现上传文件的保存地址和服务器的分离。
配置虚拟路径:
文件:Tomcat/conf/server.xml
修改文件配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
<Context path="/upload" docBase="D:\upload"/>
</Host>
在<Host></Host>
中添加<Context path="/upload" docBase="D:\upload"/>
path:链接请求的地址.
docBase:保存的本地物理地址,即在D盘下的upload文件夹保存上传的文件。
[FBI WARNING]
注意path必须和xml文件名保持一致否则不成功。docBase路径最后不能加斜杠,否则不成功。如果是用IntelliJ IDEA直接部署的项目这些修改是不会有效的,因为通过IntelliJ IDEA发布的项目不在Tomcat根目录下,它自己做了整个项目的地址映射,所以如果是用IntelliJ IDEA,就自己动手在Tomcat里手动发布一遍。