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

SpringBoot将图片存入MySQL时遇NoSuchFileException异常求助

解决Swagger UI上传图片触发NoSuchFileException的问题

针对你遇到的NoSuchFileException,结合你的代码,整理以下可能的原因及解决步骤:

1. Spring Multipart临时目录异常

Spring处理Multipart文件时,默认会将上传文件写入系统临时目录。如果该目录不存在、应用无读写权限或磁盘空间不足,会触发文件找不到的异常。

解决方法:
在application.properties(或application.yml)中手动指定可访问的临时目录:

spring.servlet.multipart.location=/opt/spring-multipart-temp

确保指定的目录已创建,且应用拥有读写权限(例如Linux下执行mkdir -p /opt/spring-multipart-temp && chmod 755 /opt/spring-multipart-temp)。

2. Swagger UI请求参数问题

Swagger UI发送multipart请求时,若文件未正确绑定会引发异常:

  • 未选择文件就执行请求
  • 请求字段名与@RequestParam的value不匹配(你的代码中是bookCover)

解决方法:

  • 执行请求前必须在Swagger UI中选择有效文件
  • 给@RequestParam添加required=true,强制校验文件存在:
@RequestParam(value = "bookCover", required = true) MultipartFile bookCover

3. 缺失MultipartFile有效性校验

你的代码未校验上传文件是否为空,空文件调用getBytes()时可能触发底层文件读取异常。

解决方法:
在服务类addBook方法开头添加校验逻辑:

if (bookCover == null || bookCover.isEmpty()) {
    throw new BadRequestException("Book cover file cannot be empty.");
}

4. 数据库字段存储限制(辅助排查)

虽然这不会直接触发NoSuchFileException,但如果图片过大超出数据库BLOB字段限制,可能间接引发异常:

  • 检查数据库book_cover字段类型,若图片较大,将其改为MEDIUMBLOB或LONGBLOB(以MySQL为例)。

调试建议

  • 打印完整异常堆栈,定位异常发生的具体代码行(是bookCover.getBytes()还是保存数据库时)
  • 输出MultipartFile的元信息(如bookCover.getOriginalFilename()、bookCover.getSize()),确认文件是否被正确接收

内容的提问来源于stack exchange,提问作者Đạt Phạm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:16:12