问题描述:
在开发一个springboot的项目时,在项目部署的时候遇到一个问题:
就是我将项目导出为jar包,然后用java -jar 运行时,
项目中文件上传的功能无法正常运行,其中获取到存放文件的目录的绝对路径的值为空,文件无法上传
问题解决:
// 使用ResourceUtils 来获取真实路径 确保部署时不会出错
File path = new File(ResourceUtils.getURL("classpath:").getPath());
System.out.println(path.getAbsolutePath());
// 如果上传的文件为/static/successImage/content/ 如下
File upload = new File(path.getAbsolutePath(), "static/successImage/content/");
if (!upload.exists()) upload.mkdirs();
String uploadPath = upload + "\\";
file.transferTo(new File( uploadPath+fileName));
配置文件需要加入:
#设置静态资源路径,多个以逗号分隔
resources:
static-locations: classpath:static/,file:${spring.servlet.multipart.location}
具体项目实战:
控制层:
/**
* 保存新闻内容中的图片,
*
* @param file 新闻内容中的图片
* @param request
* @return
*/
@RequestMapping("/admin/saveContentImg")
@ResponseBody
public JSONObject saveImage(@RequestParam("editormd-image-file") MultipartFile file, HttpServletRequest request) {
JSONObject jsonObject = new JSONObject();
ResultInfo resultInfo = articleService.saveArticleImage(file, request);
if (resultInfo.getResultCode() == 0) {
//图片上传失败的信息码
jsonObject.put("success", 0);
//信息
jsonObject.put("message", "upload error!");
} else {
//图片回显地址,即文件存放地址,应为虚拟路径
jsonObject.put("url", resultInfo.getResultObj());
//图片上传成功的信息码
jsonObject.put("success", 1);
//信息
jsonObject.put("message", "upload success!");
}
return jsonObject;
}
实现层:
/**
* 保存照片的路径
*
* @param file
* @param request
* @return
*/
@Override
public ResultInfo saveArticleImage(MultipartFile file, HttpServletRequest request) {
ResultInfo resultInfo = new ResultInfo();
try {
int l = file.getOriginalFilename().lastIndexOf(".");
String h = file.getOriginalFilename().substring(l + 1);
String fileName = UUIDUtils.getUUID() + "." + h;
System.out.println(fileName);
// 使用ResourceUtils 来获取真实路径 确保部署时不会出错
File path = new File(ResourceUtils.getURL("classpath:").getPath());
System.out.println(path.getAbsolutePath());
File upload = new File(path.getAbsolutePath(), "static/successImage/content/");
if (!upload.exists()) upload.mkdirs();
String uploadPath = upload + "\\";
file.transferTo(new File( uploadPath+fileName));
resultInfo.setResultObj("/static/successImage/content/"+fileName);
resultInfo.setResultCode(ResultInfo.RESULT_CODE_SUCCESS);
} catch (Exception e) {
e.printStackTrace();
resultInfo.setResultCode(ResultInfo.RESULT_CODE_ERROR);
}
return resultInfo;
}