使用FormData上传二进制文件、对象、对象数组方式

 更新时间:2024年01月02日 09:50:04   作者:洋哥登陆  
这篇文章主要介绍了使用FormData上传二进制文件、对象、对象数组方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

FormData上传 MultipartFile文件; 通过表单上传MultipartFile文件与对象;FormData上传对象列表

一、FormData上传 MultipartFile文件

使用element的 el-upload组件上传文件。

前端使用FormData 传输二进制文件

<template>
  <div id="app">
    <!-- formData的主要用处
    1. 网络请求中处理表单数据
    2. 网络请求中处理用来异步的上传文件 -->

    <div class="upload">
      <el-upload
        class="upload-demo"
        drag
        action="#"
        :multiple="false"
        :auto-upload="false"
        :on-change="onChange"
        :on-remove="onRemove"
        :file-list="fileList"
      >
        <i class="el-icon-upload" />
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
      <el-button size="medium" @click="upload">上传</el-button>
    </div>
  </div>
</template>

<script>
import UploadApi from '@/api/upload.js'
export default {
  name: 'FormData',
  data() {
    return {
      fileList: []
    }
  },
  methods: {
    onChange(file, fileList) {
      this.fileList = []
      this.fileList.push(file.raw)
    },
    onRemove() {
      this.fileList = []
    },
    upload() {
      const formData = new FormData()
      formData.append('file', this.fileList[0])
      // 请求服务端接口
      UploadApi.formData(formData).then(res => {
        this.$message.success(res)
      }).catch(err => {
        this.$message.error(err)
      })
    }
  }
}
</script>

后端服务器接收

@PostMapping("/formData")
public void useFormData(@RequestParam("file") MultipartFile file){
     System.out.println(file.getName());
     System.out.println(file.getBytes());
     System.out.println(file.getInputStream());
}

二、 上传 MultipartFile文件和 数据

前端仍然通过append方法添加数据

upload() {
      const formData = new FormData()
      formData.append('file', this.fileList[0])
      formData.append('time', 20220730)

      // 请求服务端接口
      UploadApi.formData(formData).then(res => {
        this.$message.success(res)
      }).catch(err => {
        this.$message.error(err)
      })
    }

后端添加@RequestBody 及实体类对象接收

@Data
public class Upload {
    private long time;
}
@PostMapping("/formData")
public boolean useFormData(@RequestBody @RequestParam("file") MultipartFile file, Upload upload){
	System.out.println(file.getName());
	System.out.println(file.getBytes());
	System.out.println(file.getInputStream());
	     
	System.out.println(upload.getTime());
}

三、上传表单数据中包含对象

前端append 方法添加数据

upload() {
      const formData = new FormData()
      formData.append('file', this.fileList[0])
      formData.append('time', 20220730)
      formData.append('bean.year', 2022)
      formData.append('bean.month', 7)
      formData.append('bean.day', 30)

      // 请求服务端接口
      UploadApi.formData(formData).then(res => {
        this.$message.success(res)
      }).catch(err => {
        this.$message.error(err)
      })
    }

后端服务器添加接收对象

@Data
public class Upload {
    private long time;
    private DayBean bean;
}

@Data
public class DayBean {
    private int year;
    private int month;
    private int day;
}
@PostMapping("/formData")
public boolean useFormData(@RequestBody @RequestParam("file") MultipartFile file, Upload upload){
	System.out.println(file.getName());
	System.out.println(file.getBytes());
	System.out.println(file.getInputStream());
	     
	System.out.println(upload.getTime());
	DayBean bean = upload.getBean();
	System.out.println("year:" + bean.getYear() + ", month:" + bean.getMonth() + ", day:" + bean.getDay());
}

四、上传对象列表

前端需要循环添加数据

upload() {
      const formData = new FormData()
      formData.append('file', this.fileList[0])
      formData.append('time', 20220730)
      for (var i = 0; i < 3; i++) {
        formData.append('bean[' + i + '].year', 2022 + i)
        formData.append('bean[' + i + '].month', 7 + i)
        formData.append('bean[' + i + '].day', 30 + i)
      }

      // 请求服务端接口
      UploadApi.formData(formData).then(res => {
        this.$message.success(res)
      }).catch(err => {
        this.$message.error(err)
      })
    }

后端服务器使用对象列表接收

@Data
public class Upload {
    private long time;
    private List<DayBean> bean;
}
@PostMapping("/formData")
public void useFormData(@RequestBody @RequestParam("file") MultipartFile file, Upload upload){
	System.out.println(file.getName());
	System.out.println(file.getBytes());
	System.out.println(file.getInputStream());
	     
	System.out.println(upload.getTime());
	List<DayBean> beanList = upload.getBean();
	for (DayBean bean : beanList) {
		System.out.println("year:" + bean.getYear() + ", month:" + bean.getMonth() + ", day:" + bean.getDay());
	}
}

其他

设置multipart上传大小

@Configuration
public class MultipartThemeConfig {

    @Bean
    public MultipartConfigElement multipartConfig(){
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件大小200MB,单位KB,MB
        factory.setMaxFileSize(DataSize.parse("5MB"));
        //单个文件大小200MB,单位KB,MB
        factory.setMaxRequestSize(DataSize.parse("10MB"));
        return factory.createMultipartConfig();
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot的测试类中使用 @Transactional 注解

    Spring Boot的测试类中使用 @Transactional 注解

    本文主要介绍了Spring Boot的测试类中使用 @Transactional 注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • Spring MVC @GetMapping和@PostMapping注解的使用方式

    Spring MVC @GetMapping和@PostMapping注解的使用方式

    这篇文章主要介绍了Spring MVC @GetMapping和@PostMapping注解的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • java 集合----Map、Collection

    java 集合----Map、Collection

    HashSet 的 add() 方法添加集合元素时实际上转变为调用 HashMap 的 put()方法来添加 key-value 对。HashMap 的 put() 方法.hashCode() 判断返回值相等,如果返回值相等则再通过 equals 比较也返回 true,最终认为key对象是相等的已经在HashMap中存在。
    2016-04-04
  • Java创建Web项目以及没有web.xml的解决方法

    Java创建Web项目以及没有web.xml的解决方法

    本文详细介绍了如何在Eclipse中创建Web项目并自动生成web.xml,提供了直接生成、新建项目时勾选、手动创建Web.xml三种方法,重点在于web.xml的作用和常见问题解决方案,
    2026-01-01
  • SpringBoot单体多模块项目环境搭建

    SpringBoot单体多模块项目环境搭建

    本文主要介绍了SpringBoot单体多模块项目环境搭建,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-02-02
  • java-springboot3.2+多数据源+hikari连接池的配置使用

    java-springboot3.2+多数据源+hikari连接池的配置使用

    本文给大家介绍java-springboot3.2+多数据源+hikari连接池的配置使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-11-11
  • Java实现的贷款金额计算功能示例

    Java实现的贷款金额计算功能示例

    这篇文章主要介绍了Java实现的贷款金额计算功能,结合实例形式分析了Java简单数值运算及类型转换等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Java责任链设计模式实例分析

    Java责任链设计模式实例分析

    这篇文章主要介绍了Java责任链设计模式,结合实例形式详细分析了Java责任链设计模式的原理与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Json转化为Java对象的实例详解

    Json转化为Java对象的实例详解

    这篇文章主要介绍了Json转化为Java对象的实例详解的相关资料,前后端数据交互的情况经常会遇到Json串与java 对象的相互转换方便操作,需要的朋友可以参考下
    2017-08-08
  • java.lang.UnsupportedOperationException的问题解决

    java.lang.UnsupportedOperationException的问题解决

    本文主要介绍了java.lang.UnsupportedOperationException的问题解决,该错误表示调用的方法不被支持或不可用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07

最新评论