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
相关产品推荐
相关产品推荐

