话说很久之前,接到一个领导需求,需要在门户首页展示几个图片,也就是轮播图。第一个版本初定稿就是使用fasdfs文件服务器,再通过设定好的nginx端口8080,进行返回给前端图片的url;想法总是美好的,实际的生产环境是分为内外网的,你的文件服务器部署到了内网上,而用户是通过外网去访问的,所以说根本就不在一个网段里面,即使你反回这个url是正确的,前端也访问不到。
第二版,想着把图片搞到项目里面,也就是resouce下的static目录下,何曾想扔到服务器上的时候,jar里面资源只支持可读,不支持写入,又是凉凉,
第三版,目标逐渐明确,我需要一个目录!!这个目录可以在任何地方,可以是同jar一个等级,也可以通过yml文件进行自定义(并且这个资源还属于这个服务!不在jar包里,却属于你的资源,这就是人家老外想得多),功夫不怕有心人,终于在网上找到一些资料:配置资源映射路径
参考与:资料一
资料二
最重要就是这两个,
@Configuration
public class TestPic extends WebMvcConfigurationSupport {
@Value("${file.common.uploadWindow}")
private String filePathWindow;
@Value("${file.common.uploadLinux}")
private String filePathLinux;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String os = System.getProperty("os.name");
if (os.toLowerCase().startsWith("win")) {
registry.addResourceHandler("/image/**")
.addResourceLocations("file:" + filePathWindow);
} else {
registry.addResourceHandler("/image/**")
.addResourceLocations("file:" + filePathLinux) ;
}
super.addResourceHandlers(registry);
/**
下面这些是我做测试用的,如果想放到与jar同级的地方 用这个应该可以!
ApplicationHome h = new ApplicationHome(this.getClass());
String path = h.getSource().getParent();
String realPath = path + "/upload/uploadFile/";
registry.addResourceHandler("/static1/**").addResourceLocations("file:"+realPath);
/**
* 资源映射路径
*/
// registry.addResourceHandler("/image/**").addResourceLocations("file:D:/image/");
}
}
在下面 就很简单了。
对一个 路径进行传输 图片,
@SuppressWarnings("rawtypes")
@PostMapping("/add/ForPic")
@ApiOperation(value = "新增轮播图", notes = "")
public ReturnData addPic(@RequestParam("file")MultipartFile uploadFile,@RequestParam("title")String title ,HttpServletRequest request) {
ReturnData re = new ReturnData();
if(uploadFile.isEmpty()){
re.setReason("请选择上传文件");
re.setStatus_code("1502");
return re;
}
File file = getRealFile();
if(!file.isDirectory()){
file.mkdirs();
}
String oldName = uploadFile.getOriginalFilename();
String fileId = UUID.randomUUID().toString().replaceAll("-","").substring(0,10);
String newName = fileId + oldName.substring(oldName.lastIndexOf("."),oldName.length());
try {
File newFile = new File(file.getAbsolutePath() + File.separator + newName);
uploadFile.transferTo(newFile);
} catch (Exception e) {
e.printStackTrace();
re.setReason("传输失败");
re.setStatus_code("1501");
return re;
}
FileUploadDTO fileUploadDTO = new FileUploadDTO();
fileUploadDTO.setFile_name(oldName);
fileUploadDTO.setTitle(title);
fileUploadDTO.setFile_id(fileId);
fileUploadDTO.setFile_type(oldName.substring(oldName.lastIndexOf("."),oldName.length()));
fileUploadDTO.setCase_type(666);
fileUpLoadService.addFiles(fileUploadDTO);
re.setReason("新增成功");
return re;
}
private File getRealFile() {
String os = System.getProperty("os.name");
String realPath = null;
if (os.toLowerCase().startsWith("win")) {
realPath = filePathWindow;
} else {
realPath = filePathLinux;
}
File file = new File(realPath);
return file;
}
over-------一切还是 要靠自己啊!