实现手动上传表单数据+图片文件

简介: 在很多项目中都会有上传数据+图片的需求,我最近在项目中负责活动发布的板块,需要几个表单数据加两个图片和一个图片数组,我看到产品需求后头就很大,我之前没有做过相关的业务,所以这几天一直在尝试,看到接口文档我内心已经崩了。

手动上传表单数据+图片文件功能

在很多项目中都会有上传数据+图片的需求,我最近在项目中负责活动发布的板块,需要几个表单数据加两个图片和一个图片数组,我看到产品需求后头就很大,我之前没有做过相关的业务,所以这几天一直在尝试,看到接口文档我内心已经崩了。

1.webp.jpg

功能要求

要求是一组活动图片,不超过四张,一张活动封面,一张群聊二维码,以及若干的表单数据,最后通过表单形式的post请求,所以我分别采用了element-upload不同的上传组件,并和表单结合通过el-form-item来进行upload和表单排版统一。

思考

  1. 因为需要手动上传,所以我们需要考虑怎么将表单数据和二进制文件放在一起
  2. 我们从哪里拿到图片的二进制
  3. 图片在页面的预览显示靠什么

功能实现

图片预览

在刚开始使用钩子尝试拿到上传的file,但是打印出来的file并没有任何作用,所以通过尝试,拿到file中的url,通过url进行图片绑定,即完成预览。

1.webp.jpg

1.webp.jpg

之后注意到了url中开头的blob这个字段,所以上网查了一下,其表示二进制类型的大对象,虽然后续没看懂,但是大概明白了它的意思,于是乎后来我就出现了一个致命错误。

拿到二进制流

我拿到blob后,以为可以通过它来获取二进制,从而百度了一上午,没有任何解决方案,二进制到底在哪里呢,我忽略了我最初拿拿到blob的地方就是通过钩子拿到的file,我通过打印file类型,和其他相关的参数,最后终于找到了二进制流文件,即file.raw起初以为它只是个个普通的对象。

手动上传

最后就是手动上传的问题,我们可以通过在请求发送前new一个formdata然后将表单按文档顺序append进去,还有我们的三组图片,最后直接通过我们封装的axios发送请求就可以了

const params = new FormData()
      params.append('name', this.form.name)
      params.append('socName', this.form.socName)
      params.append('school', this.form.school)
      params.append('backImg', this.backimg)
      params.append('startTime', this.form.startTime)
      params.append('endTime', this.form.endTime)
      params.append('select', this.form.select)
      params.append('intro', this.form.intro)
      this.List.forEach((x, index) => {
        console.log(this.fileList)
        console.log(x.url)
        console.log(index)
        params.append('file_' + index, x)
      });
复制代码

1.webp.jpg

最后

功能实现可能还是有些问题,但是能跑起来是我最大的成功,希望看到的打咯可以指点一下我其他更好的方案去实现这个功能,希望大佬能不吝赐教!!! 下面是这个项目的gitee地址,有兴趣的大佬可以去指点指点,小弟我还在努力学习ing!!!


相关文章
|
人工智能 缓存 调度
技术改变AI发展:RDMA能优化吗?GDR性能提升方案(GPU底层技术系列二)
随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。GPUDirect RDMA 是 Kepler 级 GPU 和 CUDA 5.0 中引入的一项技术,可以让使用pcie标准的gpu和第三方设备进行直接的数据交换,而不涉及CPU。
138770 6
|
监控 Linux 应用服务中间件
centos7 部署zabbix5 踩坑笔记
centos7 部署zabbix5 踩坑笔记
514 0
|
Java Spring
【SpringBoot】SpringBoot自定义banner,成千上万种可供选择,当然也可以自定义生成哦
【SpringBoot】SpringBoot自定义banner,成千上万种可供选择,当然也可以自定义生成哦
1920 1
|
10月前
|
机器学习/深度学习 存储 算法
基于结构化状态空间对偶性的贝叶斯注意力机制设计与实现
本文介绍了一种贝叶斯风格的注意力机制,用于处理长序列文本预测。传统注意力机制在处理长文本时计算复杂度高,而贝叶斯方法通过引入不确定性建模和领域知识,特别适用于小数据集或需要融入领域知识的场景。
234 3
基于结构化状态空间对偶性的贝叶斯注意力机制设计与实现
|
9月前
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
这篇文章介绍了如何在SpringBoot项目中整合Redis,并探讨了缓存穿透、缓存雪崩和缓存击穿的问题以及解决方法。文章还提供了解决缓存击穿问题的加锁示例代码,包括存在问题和问题解决后的版本,并指出了本地锁在分布式情况下的局限性,引出了分布式锁的概念。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁
|
前端开发
elementui_上传组件方法自定义(formData)
elementui_上传组件方法自定义(formData)
251 1
fastadmin实现导出Excel和导入Excel数据
fastadmin实现导出Excel和导入Excel数据
1091 0
|
缓存 监控 NoSQL
SpringBoot配置第三方专业缓存技术jetcache方法缓存方案
SpringBoot配置第三方专业缓存技术jetcache方法缓存方案
980 1
|
Java 数据安全/隐私保护 Spring
SpringSecurity6从入门到实战之SpringSecurity快速入门
这篇文章是关于使用SpringSecurity 6进行快速入门的教程。首先介绍了所需的环境配置,包括SpringSecurity 6.0.8、SpringBoot 3.0.12和JDK 17。接着,通过步骤展示了如何创建一个新的SpringBoot工程,并添加Web支持。然后,运行工程并测试了Hello接口,确保其正常工作。之后,引入SpringSecurity依赖后,无需额外配置,系统即实现了基础的认证功能,自动重定向到登录页面。文章通过截图详细说明了这个过程,包括控制台日志、登录页面以及登录后的资源访问。