spring boot框架下通过url获取静态文件:
例:静态文件存放在src平级目录/static下,目录名称是通过yml配置文件定义的:
通过url访问时的url地址:http://localhost:9301/files/20210812/2829.png
访问前需在启动类平级建立配置类:xxxConfig,继承WebMvcConfigurationSupport类,并重写addResourceHandlers方法:
@Configuration
@Slf4j
public class MvcConfig extends WebMvcConfigurationSupport {
@Autowired
TokenInterceptor tokenInterceptor;
//获取tomcat配置的虚拟文件目录
@Value("${server.tomcat.basedir}")
private String baseDir;
/**
* 发现如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。
* 需要重新指定静态资源
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 静态资源映射:
// 在此处进行静态文件路径映射:
// 先获取一个自定义的绝对路径:
String absolutePath = System.getProperty("user.dir")+"/" + baseDir+ Constent.DOCUMENT_TEMPLATE +"/";
// addResourceHandler();中存放url中拼写的路径,addResourceLocations();中存放欲映射到的路径,相当于将请求中的目标指向自定义的文件目录。
// 注意:addResourceLocations();时要加上"file:",映射本地文件时,开头必须是 file:/// 开头,表示协议。
registry.addResourceHandler("/files/**").addResourceLocations("file:" + absolutePath);
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
然后可以通过这种方式返回 “http://ip:port/xxx/xxx.jpg” 格式的文件路径给前台,前台页面可直接跳转访问:
public CommonResultBO getPath(String id, HttpServletRequest request) {
try {
ticketInfo = ticketInfoMapper.selectTicketById(id);
String vPath = ticketInfo.getFilePath();
// 拼接文件url给前台
vPath = request.getScheme() + "://" + request.getServerName()
+ ":" + request.getServerPort() + vPath;
ticketInfo.setFilePath(vPath);
return CommonResultBO.init(vPath, 200, "Select success.");
} catch (Exception exception) {
exception.printStackTrace();
log.error("selectTicketById error: " + exception.getMessage());
return CommonResultBO.init(null, -1, "Select error.");
}
}
得到文件: