版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82811812

Spring Boot + Vue 的文件上传本身没有什么难点,但如果涉及到是一个表单对象中存在文件,则会比较繁琐

更多精彩

  • 更多技术博客,请移步 asing1elife’s blog

后端实体类

  1. Spring Boot中对于文件的接收类型和Spring MVC保持一致,使用MultipartFile
  2. 与Spring MVC不同的是Spring Boot进行文件上传操作不需要添加配置信息,Spring Boot自身已经默认开启了文件上传功能
...public class Work {...@Transientprivate MultipartFile referenceFile;...
}

后端接收请求的接口

  1. SpringBoot与Vue进行集成,使用axios进行异步请求发送,对于接收对象类型的数据一般使用**@RequestBody**的注解将对象解析为JSON格式
  2. 但是MultipartFile类型的文件无法转换为JSON格式,所以此处需要使用**@ModelAttribute**的注解接收对象信息
...@RestController
@RequestMapping("/${contextPath}/works")
public class WorkController extends SimpleController<Work, WorkService> {...@ApiOperation("保存作业")@PostMapping("")public ResponseData saveRule(@ModelAttribute Work work) {return workService.save(work);}...
}

前端对文件数据的处理

  1. 使用默认的文件输入框进行文件上传会影响美观,所以通常将输入框隐藏后通过点击按钮进行调用
  2. 由于文件格式的input属性是只读的,所以无法使用v-model对其数据的更改进行实时获取
  3. 所以需要通过**@change**对其数据的更改进行监听,并赋值给表单的对应属性
<template><in-form ref="inForm" :form="work" :rules="rules" :is-file="true">...<el-button type="success" v-else @click="uploadReferenceFile">上传答案 <span v-text="work.reference"></span><input type="file" class="upload-file" ref="referenceFile" @change="setReferenceFile"></el-button>...</in-form>
</template><script type="text/ecmascript-6">
...export default {...methods: {...// 上传参考答案uploadReferenceFile () {this.$refs.referenceFile.click()},// 设置参考答案setReferenceFile (item) {let currentFile = item.target.files[0]this.work.reference = currentFile.namethis.work.referenceFile = currentFile}...}
</script><style scoped lang="stylus" rel="stylesheet/stylus">.upload-filedisplay none
</style>

前端发起请求的方式

  1. 文件格式的数据无法通过JSON格式进行传递,所以需要使用FormData对表单数据进行转换
  2. FormData只能接受StringFile格式的数据,对应Object格式的数据无法处理
  3. 如果涉及到Object格式的数据则需要前后端配合进行数据转换
  4. 通常情况下对象中关联的对象只涉及到其中的某一个值,所以前端在处理时可以单独将该值进行传递
  5. 后端在接收到该值后,可以在其Setter方法中将数据赋予对应的对象即可
export function save ({url, data}, isFile) {// 带文件的上传功能if (isFile) {let formData = new FormData()// 遍历传入的数据for (let key in data) {// 获取当前值let currentData = data[key]// 对于空值进行过滤if (currentData === '') {continue}// 将对象中的键值对传入formData中formData.append(key, currentData)}data = formData}return fetch({url: url,method: config.POST,data})
}

限制文件大小

  1. 只需要在::application.properties::中添加如下配置即可
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB

SpringBoot+Vue表单文件上传相关推荐

  1. 保姆级别SpringBoot接入又拍云实现表单文件上传手册

    一.背景 本来打算使用七牛云进行文件上传的,由于自己一直没有实名认证(需要上传手持身份证就很烦),导致现在想用的时候用不了.另外自己所在的公司用的是又拍云,就试着看看又拍云能不能用,结果就有了这篇文章 ...

  2. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  3. vueform表单文件上传_峰哥说技术系列-8.Spring Boot文件上传(Form表单和Ajax方式)

    今日份主题 Spring Boot文件上传(Form表单和Ajax方式) 在Spring Boot中,和文件上传的主要和MultipartResolver接口有关,他有两个实现类 StandardSe ...

  4. form表单文件上传

    form表单文件上传 form表单文件上传的ajax方法与文本上传有一些不一样 首先form表单的enctype属性写为**"multipart/form-data"** 默认是a ...

  5. c语言表单文件上传,requests实现文件上传(对应postman form-data)

    requests实现文件上传(对应postman form-data) requests实现文件上传(对应postman form-data) postman发送post请求,有的情况需要发送form ...

  6. PHP 表单文件上传的原理,php上传文件的原理

    文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-data&q ...

  7. 表单+文件上传+音频+iframe

    一.表单及其标签 首先书写结构 <form action="表单提交地址" menthod="post get提交方式">  form只是外边框 & ...

  8. 使用form表单文件上传(enctype)

    引入两个架包 commos-fileupload.jar commons-fileupload.jar依赖于commons-io.jar 表单的提交方式必须为post 在表单中必须添加一个属性enct ...

  9. SpringBoot+Vue+ElementUI实现文件上传与文件下载

    作者: Memory(星哥) Wechat:/QQ: 574373426 整理不易,感谢支持,欢迎 收藏 转发 分享 专注IT职业教育多年,学编程找星哥 SpringBoot+Vue+ElementU ...

最新文章

  1. Centos 安装 MySql
  2. python 单元测试_Python 单元测试(unittest)
  3. DCMTK:TLS测试DcmSCP和DcmSCPPool类
  4. HDU - 3374 String Problem(最小表示法+最大表示法+KMP的next数组)
  5. Java学习--泛型
  6. rabbitmq消费者设置手动ack
  7. oracle不完全恢复类型,Oracle——不完全恢復
  8. 自动化办公-Python处理Excel生成试卷
  9. 基于麦克风阵列的语音信号处理技术
  10. 布客·ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.1
  11. java事务和分布式事务详解
  12. 重复抽样与不重复抽样的抽样平均误差大小?
  13. blk-mq 进行多重队列
  14. 机器学习之聚类算法:K均值聚类(一、算法原理)
  15. Unity在Canvas上画线(Draw Line)实现
  16. 多时点DID平行趋势检验
  17. GO算法-栈队列转换之互通有无
  18. 代码生成工具--动软
  19. 面渣逆袭:Spring三十五问,四万字+五十图详解 。不要错过
  20. 研华数据采集板卡驱动包Xnavi离线包制作教程

热门文章

  1. 开源漏洞扫描工具(OWASP-Dependency-Check)探索
  2. Firefox Test Pilot 计划正式关闭
  3. 如何查看本机安装的python支持哪种.whl文件
  4. win10安装python
  5. 敏捷开发 我的经验(一)基本概念
  6. ios7以后隐藏状态栏
  7. 【iOS开发-74】解决方式:Xcode6下利用preference保存数据,终于的plist文件在哪里?...
  8. 黑马程序员-java-高新技术中《九》
  9. 针对Properties中实时性要求不高的配置参数,用Java缓存起来
  10. 后端开发如何设计数据库系列文章(二)设计大数据量表结构