当前位置: 首页 > 知识库问答 >
问题:

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

苗承
2023-11-19

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

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

共有2个答案

白腾
2023-11-19

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

岳志义
2023-11-19

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

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

 类似资料:
  • 我运行一个简单的后端应用程序,允许上传文件。我使用泽西岛并在码头运行它。我的代码部分如下所示: 上传工作正常,但我发现该方法是在整个流上传到后端时调用的。因此,例如,如果我发送大文件(要上传3Gigs),我的POST请求会立即出现在后端,但只有当整个3Gigs通过网络上传时才会调用上面的方法。 我想在方法中进行一些检查,并且在某些情况下不上传文件,因此它不需要将整个内容传递到后端,然后将错误消息发

  • 我在后端使用spring-boot 2.0.4,在前端使用vue 2.5.16 / axios 0.18.0,我希望将PDF文件上传到后端数据库,并从前端检索它们。 最初,我的灵感来自于spring部分的这个例子:https://grokonez . com/frontend/angular/angular-6/angular-6-client-upload-files-download-file

  • 鄙人Javaer,对前端不太了解,想请教大佬们,前端上传文件的原理是什么(包括不限于表单上传、ajax上传) 比如,当点击上传按钮时,前端是如何将用户选择的文件转换成网络流,通过浏览器进行发送的? 前端小白,希望大佬们可以答疑解惑

  • 本文向大家介绍python后端接收前端回传的文件方法,包括了python后端接收前端回传的文件方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python后端接收前端回传的文件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • Web应用程序需要提供允许文件上载的功能。 让我们看看如何从客户端接收文件并将它们存储在我们的服务器上。 我们已经使用koa-body中间件来解析请求。 此中间件还用于处理文件上载。 让我们创建一个表单,允许我们上传文件,然后使用Koa保存这些文件。 首先使用以下内容创建名为file_upload.pug的模板。 html head title File uploads b

  • 在Laravel中上传文件非常简单。 我们需要做的就是创建一个视图文件,用户可以选择要上载的文件和处理上传文件的控制器。 在视图文件中,我们需要通过添加以下代码行来生成文件输入。 Form::file('file_name'); 在Form :: open()中,我们需要添加'files'=》'true' ,如下所示。 这有助于将表单上载到多个部分。 Form::open(array('url'