最近有一个上传图片的需求,我选择的方案是将图片保存到静态资源文件夹,并将访问路径(网址)保存到mysql数据库中。
1、 图片上传工具类
public class UploadUtils {
//图片上传位置,静态资源文件夹文件存储路径
private static final String BASE_PATH = "D:\\platform\\src\\main\\resources\\static\\image\\";
//访问路径
//在浏览器上访问该路径可以看到图片,ip和端口号可以根据自身需求设置
private static final String ACCESS_PATH = "http://localhost:8080/image/";
/**
* 图片上传
* @param file
* @return 访问图片的网址
*/
public static String upload(MultipartFile file){
//获取图片的原始名称
String fileName = file.getOriginalFilename();
//生成新名称
String suffixName = fileName.substring(fileName.lastIndexOf("."));
String newFileName = UUID.randomUUID()+suffixName;
File dest =new File(BASE_PATH+newFileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
} catch (IOException e) {
e.printStackTrace();
}
String fileUrl = ACCESS_PATH + newFileName;
return fileUrl;
}
}
2、配置静态资源映射
做完图片上传之后,根据返回的路径访问不到图片,重启了服务器,再次访问发现竟然可以了,不重启它就不能显示。这是因为对服务器的保护措施导致的,服务器不能对外部暴露真实的资源路径,需要配置虚拟路径映射访问。
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//此处路径和上面的图片上传位置保持一致
registry.addResourceHandler("/image/**").addResourceLocations("file:D:/platform/src/main/resources/static/image/");
}
}
3、此时访问fileUrl就可以看到图片了