为何org.springframework.core.io.AbstractResource的getFile()会抛出异常?
为什么MultipartFile.getResource().getFile()会抛出异常
MultipartFile.getResource()返回的Resource对象,其getFile()方法并非在所有场景下都能正常工作,抛出异常的核心原因是该资源并非对应本地文件系统中的物理文件,具体场景包括:
上传文件被存储在内存中:当上传的文件尺寸较小(默认通常是1MB,可通过配置调整),Spring会将文件内容直接保存在内存中,此时
getResource()返回的是ByteArrayResource类型。这种资源没有对应的本地文件路径,调用getFile()自然会抛出IOException。资源不存在于本地文件系统:如果上传的文件是通过非本地文件系统的方式处理(比如直接通过流处理未落地到磁盘),或者对应的
Resource实现是InputStreamResource等不依赖本地文件的类型,调用getFile()也会触发异常——这类资源仅能通过流的方式读取内容,无法映射到本地文件。临时文件已被清理:即使上传文件最初被保存到临时目录(对应
FileSystemResource),如果临时文件在调用getFile()前已被系统或应用清理,也会导致找不到文件的异常。
简单来说,getFile()仅适用于资源对应本地物理文件的场景,而MultipartFile的资源实现并不总是满足这个条件,因此更可靠的做法是使用getInputStream()来读取文件内容,而非依赖getFile()。
内容的提问来源于stack exchange,提问作者plll0123
相关产品推荐
相关产品推荐

