You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中java.nio.file.AccessDeniedException异常求助

Spring Boot从Resource目录下载文件遇AccessDeniedException解决办法

问题描述

尝试从Spring Boot的resource目录下载文件时,抛出异常:

java.nio.file.AccessDeniedException: src\main\resources\generatedFiles 

原下载代码:

FileSystemResource fileResource = new FileSystemResource("src/main/resources/generatedFiles/");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDisposition(ContentDisposition.attachment().filename("convertedCollection.feature").build());
headers.setContentLength(((FileSystemResource)fileResource).contentLength());
return ResponseEntity.ok().headers(headers).body(fileResource);

问题原因

  1. 访问对象错误:代码指向的是generatedFiles目录而非具体的convertedCollection.feature文件,目录无法直接作为文件流返回,触发权限限制。
  2. 资源加载方式不兼容打包场景:FileSystemResource仅能访问本地文件系统路径,Spring Boot打包成jar/war后,src/main/resources目录会被合并到jar内部,原路径不再存在;即使在开发环境,也可能因目录权限配置问题报错。

解决办法

通用解决方案(适配开发+生产环境)

使用Spring原生的ResourceLoader加载classpath资源,自动适配开发环境的文件系统和生产环境的jar包内资源:

  1. 注入ResourceLoader:
@Autowired
private ResourceLoader resourceLoader;
  1. 修改下载逻辑:
public ResponseEntity<Resource> downloadFeatureFile() throws IOException {
    // 直接指向classpath下的目标文件,无需添加src/main/resources前缀
    Resource fileResource = resourceLoader.getResource("classpath:generatedFiles/convertedCollection.feature");

    // 前置检查文件是否存在
    if (!fileResource.exists()) {
        return ResponseEntity.notFound().build();
    }

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    // 处理文件名编码,避免中文乱码
    headers.setContentDisposition(ContentDisposition.attachment()
            .filename(fileResource.getFilename(), StandardCharsets.UTF_8)
            .build());
    headers.setContentLength(fileResource.contentLength());

    return ResponseEntity.ok().headers(headers).body(fileResource);
}

开发环境临时调试方案

如果仅在开发环境测试,可快速修正:

  • 将路径改为具体文件:src/main/resources/generatedFiles/convertedCollection.feature
  • 确保generatedFiles目录和目标文件有读写权限(Windows调整文件夹安全权限,Linux执行chmod 755 src/main/resources/generatedFiles)

内容的提问来源于stack exchange,提问作者Aniket Thorat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:52:40