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

Spring Boot开发文件上传接口时GET请求报错:路径/file/upload/未找到

问题分析与解决方案

核心问题

  1. 类级请求方法限制冲突:你的FileResource类上的@RequestMapping指定了method = GET,这会强制该类下所有接口仅接受GET请求。但上传接口用了@PostMapping("/upload"),这种情况下Spring不会注册这个POST接口——类的全局限制把请求方式锁死为GET,导致/file/upload路径不存在可处理GET请求的接口,所以发起GET请求时会提示路径未找到。
  2. 错误的请求方式:文件上传接口本身就该用POST(或PUT)请求,GET请求不支持携带文件参数,即便路径正确,用GET请求访问POST接口也会报错。

修复步骤

1. 移除类上的请求方法限制

修改类的@RequestMapping,去掉method = GET,让类下的接口可以自由定义请求方式:

@RestController
@RequestMapping("/file")  // 移除method=GET限制
public class FileResource {

    public static final String DIRECTORY = System.getProperty("user.home") + "/Downloads/";

    @PostMapping("/upload")
    public ResponseEntity<List<String>> uploadFiles(@org.jetbrains.annotations.NotNull @RequestParam("files") List<MultipartFile> multipartFiles) throws IOException {
        List<String> filenames = new ArrayList<>();
        for (MultipartFile file : multipartFiles) {
            String filename = StringUtils.cleanPath(Objects.requireNonNull(file.getOriginalFilename()));
            Path fileStorage = Paths.get(DIRECTORY, filename).toAbsolutePath().normalize();
            Files.copy(file.getInputStream(), fileStorage, StandardCopyOption.REPLACE_EXISTING);
            filenames.add(filename);
        }
        return ResponseEntity.ok().body(filenames);
    }
}

2. 修正参数名冲突

你方法里的参数名MultipartFile和类型重名了,改成小写的multipartFiles避免编译问题(上述代码已修正)。

3. 使用正确的请求方式

发起POST请求到/file/upload,并以multipart/form-data格式携带files参数(文件列表)。

额外提示

  • 确保项目已引入spring-boot-starter-web依赖,它包含处理文件上传所需的Multipart支持。
  • 如果需要限制文件大小,可在application.properties中配置:
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

内容的提问来源于stack exchange,提问作者Rami Taher Wahdan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:37:32