使用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();
    }
}

总结

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

相关文章

  • 解决SpringBoot application.yaml文件配置schema 无法执行sql问题

    解决SpringBoot application.yaml文件配置schema 无法执行sql问题

    这篇文章主要介绍了解决SpringBoot application.yaml文件配置schema 无法执行sql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • springboot 自定义异常并捕获异常返给前端的实现代码

    springboot 自定义异常并捕获异常返给前端的实现代码

    在开发中,如果用try catch的方式,每个方法都需要单独实现,为了方便分类异常,返回给前端,采用了@ControllerAdvice注解和继承了RuntimeException的方式来实现,具体实现内容跟随小编一起看看吧
    2021-11-11
  • jetbrain fleet对标vscode实际操作

    jetbrain fleet对标vscode实际操作

    Gradle是一个基于Apache Ant和Apache Maven概念项目自动化构建开源工具,jetbrain家的fleet(已获得预览权限)直接对标vscode , fleet有望超过vscode吗?今天我们实际操作下
    2021-12-12
  • Java异常处理运行时异常(RuntimeException)详解及实例

    Java异常处理运行时异常(RuntimeException)详解及实例

    这篇文章主要介绍了 Java异常处理运行时异常(RuntimeException)详解及实例的相关资料,需要的朋友可以参考下http://time.qq.com/?pgv_ref=aiotime
    2017-05-05
  • Spring Security实现验证码登录功能

    Spring Security实现验证码登录功能

    这篇文章主要介绍了Spring Security实现验证码登录功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • java自定义线程模型处理方法分享

    java自定义线程模型处理方法分享

    本文给大家总结分享了下个人关于java处理自定义线程模型的一些经验和处理方法,有需要的小伙伴可以参考下
    2016-08-08
  • 详解SpringBoot中实现依赖注入功能

    详解SpringBoot中实现依赖注入功能

    这篇文章主要介绍了详解SpringBoot中实现依赖注入功能,SpringBoot的实现方式基本都是通过注解实现的。有兴趣的可以了解一下。
    2017-04-04
  • SpringAop实现操作日志记录

    SpringAop实现操作日志记录

    这篇文章主要介绍了SpringAop实现操作日志记录的方法,帮助大家更好的理解和使用SpringAop,感兴趣的朋友可以了解下
    2020-12-12
  • 如何在Spring Boot中使用MyBatis访问数据库

    如何在Spring Boot中使用MyBatis访问数据库

    MyBatis可以通过简单的XML或者注解来配置和映射原始类型,接口,和Java POJO为数据库中记录,使用MyBatis帮助我们解决各种问题,本文介绍如何在Spring Boot中使用MyBatis访问数据库,感兴趣的朋友一起看看吧
    2023-11-11
  • SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化

    SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化

    这篇文章主要介绍了SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论