静态资源的虚拟路径和独立静态资源管理系统的实现

一、什么是虚拟路径?

        举个例子:上传一张图片放到:D://group/29015054169244_投影.png

                          但是前台访问是这样的:http://ip:port/image/29015054169244_投影.png

        显然这种访问方式,应该是在tomcat下的项目静态资源文件夹下了,但是图片不在那里存放,为什么能访问到?

        这就是虚拟路径的作用了。

二、为什么需要虚拟路径?

        1、业务数据(资源)与代码分离,防止盘符不够或者后续修改重新部署等丢失;

        2、当项目被打包成一个.jar文件部署时,再将上传的文件放到这个.jar文件中是有多么低的效率;

        3、网站数据的备份将会很痛苦。

三、虚拟路径的配置:

1、tomcat 配置方式:con/server.xml (docBase就是实际的路径,path是虚拟路径,相当于把改路径映射到服务器中)

  <!-- 设置图片虚拟路径[访问时路径为/image] -->  
         <Context path="/image" docBase="D:\group" reloadable="true" /> 

2、springboot 配置方式:

2-1、配置类:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

/** * 图片绝对地址与虚拟地址映射 */
 @Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {   

@Override  
public void addResourceHandlers(ResourceHandlerRegistry registry) {
   //文件磁盘图片url 映射
   //配置server虚拟路径,handler为前台访问的目录,locations为files相对应的本地路径
   registry.addResourceHandler("/image/**").addResourceLocations("file:///D:/group/");  } 
}

  2-2、 另一种直接在配置文件application.properties配置方式(这种是把项目下所有的静态资源访问映射到D:/group/下):

其中upload.download.path:自定义的属性,指定了一个路径,注意要以/结尾;

  spring.mvc.static-path-pattern=/**表示所有的访问都经过静态资源路径;

  spring.resources.static-locations在这里配置静态资源路径,覆盖默认配置,所以需要将默认的也加上,否则staticpublic等这些路径将不能被当作静态资源路径,在这个最末尾的file:${upload.download.path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量。

server.port=1122

upload.download.path=D:/group/

spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${upload.download.path}

3、eclipse下配置:(参考网上的留着做参考用,未经验证。。)

四、独立静态资源管理系统的实现(通过数据流来读取图片

1、系统中需要用到大量的图片和其他静态文件资源,考虑静态资源的统一管理和服务器性能(静态资源缓存等等,后话暂时不提),需要和restfulAPI接口分开,于是有了这个独立的静态资源管理系统(实际项目中是独立于其他接口的,也是独立分配了服务器部署的。)

2、比如上传一张图片,会自动根据类型和分组情况放到预先配置好的路径下,新的分组会新建文件夹存放,然后把类型和分组和图片名称一起存入数据库待用。

       访问这张图片:*/downloadImgOrVideo.do?type=12&path=group1/29015054169244_投影.png

      客户端并不知道图片的真实存放位置,但是可以把类型和“分组路径”发给服务端,服务端根据两者信息,去配置好的实际路径下寻找这个图片。

猜你喜欢

转载自blog.csdn.net/ejiao1233/article/details/81544998