当前位置: 首页 > news >正文

上传图片,base64改为文件流,并转给后端

需求:
在这里插入图片描述

html代码:

 <el-dialog v-model="dialogPicVisible" title="新增图片" width="500"><el-form :model="picForm"><el-form-item label="图片名称:" :label-width="100"><el-input v-model="picForm.picName" clearable /></el-form-item><el-form-item label="新增图片:" prop="img" :label-width="100"><el-uploadclass="avatar-uploader":show-file-list="false":http-request="uploadFn"><img v-if="picForm.file" :src="picForm.file" class="avatar" /><el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon></el-upload></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="dialogPicVisible = false">取 消</el-button><el-button type="primary" @click="submitPicBtn"> 确 认 </el-button></div></template></el-dialog>

这是base64转文件流的代码

// base64转文件流
function base64ToFile(base64Data, filename) {// 将base64的数据部分提取出来const parts = base64Data.split(";base64,");const contentType = parts[0].split(":")[1];let strArr = contentType.split("/");console.log('strArr',strArr)const raw = window.atob(parts[1]);// 将原始数据转换为Uint8Arrayconst rawLength = raw.length;const uInt8Array = new Uint8Array(rawLength);for (let i = 0; i < rawLength; ++i) {uInt8Array[i] = raw.charCodeAt(i);}// 使用Blob和提取出的数据内容创建一个新的Blob对象const blob = new Blob([uInt8Array], { type: contentType });// 创建一个指向Blob对象的URL,并使用这个URL创建一个File对象const blobUrl = URL.createObjectURL(blob);const newFilename = filename + '.' + strArr[1]const file = new File([blob], newFilename, { type: contentType });// 返回File对象return file;
}

这是确认提交的逻辑

function submitPicBtn() {const file = base64ToFile(picForm.file, picForm.picName);console.log('file',file)let strArr = file.type.split("/");var fileForm = new FormData();fileForm.append("classifyId", form.classifyId);fileForm.append("file", file);var newPicName = picForm.picName + "." + strArr[1];fileForm.append("picName", newPicName);axios.post("/h5htglpt/api/uploadPic", fileForm, {headers: {"Content-Type": "multipart/form-data",},}).then((res) => {console.log('res',res)if (res.data.code == "0") {ElMessage({message: "新增成功",type: "success",});dialogPicVisible.value = falsegetTreeList();}}).catch((error) => {});
}

打印上传成功后的file 注意:name需要拼接图片类型的后缀

在这里插入图片描述

这是css的代码

.demo-image .block {padding: 30px 0;text-align: center;border-right: solid 1px var(--el-border-color);display: inline-block;width: 20%;box-sizing: border-box;vertical-align: top;
}
.demo-image .block:last-child {border-right: none;
}
.demo-image .demonstration {display: block;color: var(--el-text-color-secondary);margin: 10px 0;font-weight: bold;letter-spacing: 1px;
}.avatar-uploader .avatar {width: 178px;height: 178px;display: block;
}::v-deep .avatar-uploader .el-upload {border: 1px dashed var(--el-border-color);border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;transition: var(--el-transition-duration-fast);
}.avatar-uploader .el-upload:hover {border-color: var(--el-color-primary);
}.el-icon.avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 178px;height: 178px;text-align: center;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QT 图片处理
  • C#的DllImport使用方法
  • STM32智能空气质量监测系统教程
  • VUE与React的生命周期对比
  • 基于物联网的智慧校园建设与发展
  • 打造你的智能家居指挥中心:基于STM32的多协议(zigbee、http)网关(附代码示例)
  • 【MySQL】4.MySQL 的数据类型
  • jQuery 元素选择器集合
  • 数据结构第25节 深度优先搜索
  • 【算法】无重复字符的最长子串
  • MySql中modify、rename、change的用法和区别
  • CSS技巧专栏:一日一例 1.纯CSS实现 会讨好的热情按钮 特效
  • Java版Flink使用指南——从RabbitMQ中队列中接入消息流
  • 卷积神经网络——LeNet——FashionMNIST
  • tensorflow之欠拟合与过拟合,正则化缓解
  • es6
  • express.js的介绍及使用
  • Javascript编码规范
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • python_bomb----数据类型总结
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React Native移动开发实战-3-实现页面间的数据传递
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 订阅Forge Viewer所有的事件
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​zookeeper集群配置与启动
  • ​插件化DPI在商用WIFI中的价值
  • # 达梦数据库知识点
  • #AngularJS#$sce.trustAsResourceUrl
  • (30)数组元素和与数字和的绝对差
  • (C语言)二分查找 超详细
  • (纯JS)图片裁剪
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (一) storm的集群安装与配置
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net 获取某一天 在当月是 第几周 函数
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET下ASPX编程的几个小问题
  • @ModelAttribute 注解
  • @RequestBody与@ResponseBody的使用
  • @test注解_Spring 自定义注解你了解过吗?
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [AI 大模型] Meta LLaMA-2
  • [Android] 修改设备访问权限
  • [AX]AX2012 R2 出差申请和支出报告