SpringBoot本地上传文件路径的动态映射,运行时获取项目路径。

这篇文章里有几种项目路径获取的输出测试,写的比较详细。
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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值