FormData异步发送文件,后端SpringBoot接收

这篇具有很好参考价值的文章主要介绍了FormData异步发送文件,后端SpringBoot接收。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述:

  • 平时我们用表单提交数据时,所有的数据都是以键值对的形式提交给后端的,对于文件二进制流数据也是以键值对提交的,只是说此时值的内容是二进制数据罢了。如果我们想给后端上传文件,一般都是利用表单里的File控件去提交的,但这时候有一个问题,这种上传方式不是异步的,就是说我上传后,后端都会响应一个页面过来。那如果我现在想异步上传文件,该怎么办呢?这时候就要用到js提供的FormData对象了。

具体思想:

FormData可以把表单序列化,就是说之前我们是通过表单去形成键值对,而此时我们可以用FormData去创造键值对,然后搭配Ajax,给后端发送数据。直接说是很抽象的,我们直接看代码就很形象了。


实现代码:

前端代码

   <p>username:<input type="text" id="d1"></p>
<p>password:<input type="text" id="d2"></p>
<p><input type="file" id="d3" accept="image/*"></p>
<input type="file" id="d4" accept="image/*"><br>
<input type="file" id="d5" accept="image/*"><br>
<button class="btn btn-info" id="d6">点击</button>

<script>
    //点击按钮朝后端发送普通键值对和文件数据
    $('#d6').on('click',function (){
        //1.先创建一个空的FormData,该对象里面是不包含任何键值对的
        let formDateObj = new FormData();
        //2.append方法是为FormData添加键值对的,第一个参数是键名,第二个是键值
        formDateObj.append('username',$('#d1').val());
        formDateObj.append('password',$('#d2').val());
        //3.添加文件二进制数据的键值对,第一个参数是键名,第二个参数是文件对应的二进制流数据
        formDateObj.append('File1',$('#d3')[0].files[0]);
        formDateObj.append('File2',$('#d4')[0].files[0]);
        formDateObj.append('File3',$('#d5')[0].files[0]);
        //4.将对象基于ajax发送给后端,因为能异步请求的途径只有ajax
        $.ajax({
            url:'broadcast',//broadcast为后端接口
            type:'post',
            data:formDateObj,  //直接把FormData对象上传,该对象里包含了前面我们通过append方法添加进来的键值对,这一步就是取代了平时我们通过表单提交键值对的过程

            //ajax发送文件必须要指定两个参数
            contentType:false,  //不要使用任何编码,django后端能够自动识别formdata对象
            processData:false,  //告诉浏览器不要对你的数据进行任何处理

            success:function (args) {
               window.alert(args);//args是后台返回的数据
            }
        })
    })
</script>

因为这里我是利用表单对象FormData来上传数据的,FormData代表的就是表单,所以代码里不需要写表单标签,而是直接写控件标签。 type="file"控件里的accept属性是用来规定上传文件的格式,在这里规定的是只能上传图片形式的文件,image代表图片,后面的*号代表图片里的所有格式都可以上传,包括png,jpg等

后端代码

@RestController
public class serve {

    @PostMapping("/broadcast")
    public String broadcast(String username, String password, MultipartFile File1, MultipartFile File2, MultipartFile File3){
        System.out.println(username);
        System.out.println(password);
        System.out.println(File1.getOriginalFilename());
        System.out.println(File2.getOriginalFilename());
        System.out.println(File3.getOriginalFilename());
       return "上传成功";
    }
}

后端接收接口的方法形参名一定要和前端发送键值对的键名同名且一一对应(包括文件二进制流数据在内),否则上传不成功。这里是打印出文本内容和前端上传文件的文件名

运行结果

springboot接收formdata,spring boot,ajax,javascript
springboot接收formdata,spring boot,ajax,javascript文章来源地址https://www.toymoban.com/news/detail-616342.html


到了这里,关于FormData异步发送文件,后端SpringBoot接收的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot后端接收前端传数组参数方法

    与@RequestBody不同,@RequestParam传递的数组中有多少个值,便排排下来写便是 (注意微操,参数名需为key的名称为@RequestParam括号里的名称,而不是定义的数组名)

    2024年02月16日
    浏览(39)
  • SpringBoot前端传递数组后端怎么接收

    在Spring Boot中,前端传递数组到后端的方式可以有多种。以下介绍两种常用的方法: 使用@RequestParam接收数组参数: 前端可以通过URL参数的形式传递数组,后端使用@RequestParam注解来接收数组参数。 示例代码: 前端请求示例: 在URL参数中使用相同的参数名(如arrayParam),Sp

    2024年02月04日
    浏览(46)
  • vue+axios 向后端SpringBoot传递List 后端使用List接收

    困扰了一天的问题第二天终于解决了! 一开始是这样向后端传的:(主要看后面的seats) 结果报错了: 在网上找了好多解决方法,有说参数太长,超过了Tomcat的限制了怎么的,反正是没有解决。 直接上解决方法吧。 前端代码:  后端代码: 最后附上我自己的: 前端代码:

    2024年02月03日
    浏览(47)
  • springboot(java)使用javamail实现邮件的接收、转发、发送、清除

    最近在弄邮件相关的功能,被搞的头大,很多找的方法根本不知道该怎么往下走,就目前为止, 经过各种的碰壁和失败,就整理出来如何使用javamail实现邮件的接收、转发、发送、清除 不单单是分享,也为我后续查找更方便做一个记录 在正式发送邮件之前,我们应该对邮件

    2024年02月04日
    浏览(43)
  • 207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

    1、ContentUtil 先定义常量 2、RabbitMQConfig 创建队列的两种方式之一: 配置式: 在容器中配置 org.springframework.amqp.core.Queue 类型的Bean,RabbitMQ将会自动为该Bean创建对应的队列。 就是在配置类中创建一个生成消息队列的@Bean。 问题: 用 @Configuration 注解声明为配置类,但是项目启动

    2024年02月06日
    浏览(53)
  • SSE:后端向前端发送消息(springboot SseEmitter)

    有一个项目,前端vue,后端springboot。现在需要做一个功能:用户在使用系统的时候,管理员发布公告,则使用系统的用户可以看到该公告。 基于此,一个简单的方案: 前端使用JS方法setInterval ,重复调用后端公告获取接口。此方法有几点缺陷: 循环调用的时间间隔不好确定

    2024年02月02日
    浏览(46)
  • 简单的RabbitMQ集成Springboot实现订单异步发送功能示例以及RabbitMQ的相关问题

    引入RabbitMQ的依赖,在pom.xml文件中添加以下代码: 在application.properties文件中配置RabbitMQ的相关信息: 创建消息队列,并定义消息接收者: 定义消息发送者: 在需要发送订单信息的地方调用OrderSender的send方法即可: RabbitMQ是一个开源的消息中间件,主要用于实现应用之间的异

    2024年02月09日
    浏览(33)
  • 在前后端分离的项目中,Springboot vue,前端把json传到后端,后端用一个类接收,json中的数据是怎么转换类型的

    在前后端分离的项目中,前端通常会将数据以 JSON 格式传输给后端,后端需要将接收到的 JSON 数据转换为对应的类型。这个过程可以通过后端框架和库来自动完成。 在Spring Boot中,后端可以使用相关的库来实现JSON数据的转换。常见的库包括Jackson、Gson和FastJson等。这些库提供

    2024年02月13日
    浏览(67)
  • SpringBoot文件上传同时,接收复杂参数

    目录 环境信息 问题描述 错误分析 解决方法 简单参数 总结         Spring Boot:2.0.8.RELEASE         Spring Boot内置的tomcat:tomcat-embed-core 8.5.37         收到文件上传的开发工作,要求能适配各种场景,并且各场景的请求参数不一样,因此接收的参数不能是固定的几个字段

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包