SpringBoot的2种图片获取方式
一、静态资源加载式
通过配置静态文件目录的方式,直接访问图片.
方法1:配置文件配置
#静态资源访问路径
spring.mvc.static-path-pattern=/image/**
#静态资源映射路径
spring.resources.static-locations=classpath:/(实际存放目录)
如果是yml配置文件,改下格式就行
方法2:配置类配置的方式
我这个是springboot2.1.4
网上大多数都用的低版本方式配置的,但是那个方式已经被废弃
@Configuration
public class AddStaticResourceConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/image/**")
.addResourceLocations("file:/Users/admin/upload/");
//说明一下这里的路径是linux/mac的,windows的要改下风格和加上磁盘
}
}
二、HttpServlet编程式(不需要配置文件)
@Controller
public class ImageApi {
/**
* 获取图片的第二种方式,这种方式不需要配置,调用接口返回即可
* @param request
* @param response
* @return
*/
@GetMapping("/photos/**")
public String getImage(HttpServletRequest request, HttpServletResponse response) {
File file = getImageFile(request.getRequestURI().substring(7));
if (file == null) {
return "404";
}
response.setContentType("image/" + file.getName().substring(file.getName().lastIndexOf(".") + 1));
try {
ServletOutputStream out = response.getOutputStream();
out.write(FileUtils.readFileToByteArray(file));
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//说明一下:我这里的图片目录是存储到项目目录内的,本机开发的时候免得图片忘记存哪儿去了
//实际开发的时候因为最后整个项目是要打包的,所以建议不要使用这种方式获取目录
private static final String ROOT = System.getProperty("user.dir");
private static final String IMAGE_PATH = ROOT+"/upload";
private File getImageFile(String id) {
File file = new File(IMAGE_PATH+id);
if (file.exists()){
return file;
}else {
return null;
}
}
}