这篇文章里有几种项目路径获取的输出测试,写的比较详细。
SpringBoot项目jar发布获取jar包所在目录路径
正文开始
1、注册文件的映射路径,主要用于图片预览。
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Value("${dir.upload}")//从配置文件获取上传的文件夹名
private String uploadDir;//代码在序号2
@Autowired
private DynamicPath dynamicPath;//这里是动态获取项目路径component类,代码在序号3
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//获取项目target路径或者jar包同级路径
//在ide中会获取target的根路径,部署成jar包会获取jar包同级路径
String targetPath = dynamicPath.getTargetPath();
//格式化上传路径和文件夹常量,用于全局使用,在上传的方法中会使用这两个常量。代码在序号4
PathUtils.UPLOAD_DIR = "/" + uploadDir + "/";
PathUtils.LOCAL_UPLOAD_PATH = targetPath;
//注册映射路径 不需要上传功能的可以直接在这边写死映射路径
registry.addResourceHandler(PathUtils.UPLOAD_DIR + "**").addResourceLocations("file:/" + targetPath + PathUtils.UPLOAD_DIR);
}
}
2、配置文件
dir:
upload: upload #上传文件夹名称
3、动态获取路径类
@Component
public class DynamicPath {
/**
* 获取目标路径
* @return ide运行获取项目target路径 jar包运行获取jar包同级路径
*/
public String getTargetPath(){
ApplicationHome applicationHome = new ApplicationHome(getClass());
File source = applicationHome.getSource();
String targetPath = source.getParentFile().toString();
return targetPath;
}
}
4、路径工具类
public class PathUtils {
//本地文件上传 文件夹
public static String UPLOAD_DIR;
//本地文件上传 文件夹夹路径 全路径
public static String LOCAL_UPLOAD_PATH;
}
5、上传工具类
@Slf4j
public class LocalUploadUtils {
/**
* 上传方法
* @param file 文件
* @param dirName 文件夹名称
* @return
*/
public static String uploadFile(MultipartFile file, String dirName){
String fileName = file.getOriginalFilename();//文件名
String suffixName = fileName.substring(fileName.lastIndexOf("."));// 后缀名
String filePath = PathUtils.UPLOAD_DIR + dirName + "/" + UUID.randomUUID() + suffixName;//文件路径
String fullPath = PathUtils.LOCAL_UPLOAD_PATH + filePath;//上传路径
log.info("--------文件上传到项目路径---------");
log.info("filePath:" + filePath);
log.info("uploadPath:" + fullPath);
log.info("--------------------------------");
File dest = new File(fullPath);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
} catch (IOException e) {
e.printStackTrace();
}
return filePath;
}
}