前后端上传文件,后端不能使用file类接收?

springboot接收前端上传到后端的文件时,在controller层内大多数使用的是MultipartFile进行接收的,当使用file进行接收时会报错

有大佬知道为啥不能用file接收文件吗?

阅读 1.6k
2 个回答

很简单,因为File类代表的是本地一个实体文件,而前端上传上来的只是一个数据流(stream),再直白点说,它肯定不是你服务器端一个实体文件对吧?所以不能用File类。

你后端处理的时候,如果想保存成本地文件,肯定得把前端传过来的文件流写入某个文件对吧,这时候才是真正的File

楼上说的很清楚了,你使用MultipartFile类进行接收的时候,看看有什么方法能给你用?当数据在网络间传输的时候,是以文件输入流的形式也就是经过序列化的,自然就不能用文件类来接收了,所以Spring就包装了一个MultipartFile类用于接收,注意它是Spring框架的,不引入Spring没法用:
image.png
再看看它的源码注释,作者表示“这是一种可以接收使用多种请求方式来进行上传文件的代表形式。这个文件内容可以存储到内存中或者存储在磁盘的临时位置上。两种情形下,如果有需要用户都可以自由地拷贝文件内容到session存储中,或者以一种永久存储的形式进行存储。这种临时性的存储在请求结束之后将会被清除掉。”所以你可以使用MultipartFile类型对象进行接收后,把它转成文件保存到你需要的地方去,也可以只读取它的内容而不保存下来。
image.png
为此它还贴心的提供了保存文件到指定位置的方法:
image.png
可以看到默认实现就是把输入流读入内存再用输出流输出到指定路径,当然它的子类有不同的实现。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏