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

使用base64通用文件上传

编写一个上传文件的组件 tuku,点击图片上传后使用FileReader异步读取文件的内容,读取完成后获得文件名和base64码,调用后端uploadApi,传入姓名和base64文件信息,后端存入nginx中,用于访问

 tuku.ts组件代码:

<template><!-- 点击后触发方法修改父组件的值 --><el-avatar :size="80" src="imgmodelValue1" @click="drawer = true" style="cursor: pointer;"><img src="https://cube.elemecdn.com/e/fd/0fc7d20532fdaf769a25683617711png.png" /></el-avatar><el-drawer v-model="drawer" title="图片上传" :with-header="false"><el-upload class="avatar-uploader" :show-file-list="false" :on-change="onChange" :auto-upload="false"><el-icon class="avatar-uploader-icon"><Plus /></el-icon></el-upload></el-drawer></template><script lang="ts" setup>import { defineModel,ref} from 'vue';
import { uploadApi } from '@/api/index.ts';const modelValue = defineModel("tukuimg1")const onChange = (uploadFile:any, uploadFiles: any)=>{let name =uploadFile.name//FileReader是浏览器提供的API,用于异步读取文件的内容let reader = new FileReader()//使用readAsDataURL方法异步读取文件内容。uploadFile.raw应该是文件对象本身reader.readAsDataURL(uploadFile.raw)//设置FileReader的onload事件处理器,当读取操作完成时,这个函数会被调用,注意这里的file参数实际上是event对象reader.onload = (file)=>{callUploadApi(name,file.target?.result)}}const callUploadApi = (name:String,base64 :any)=>{uploadApi.upload.call({name,base64}).then((res: any)=>{modelValue.value = resdrawer.value = false})}const drawer = ref(false)</script><style scoped>
.avatar-uploader .avatar {width: 100px;height: 100px;display: block;
}
</style>
<style>
.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: 100px;height: 100px;text-align: center;
}
</style>

使用组件

 后端api

      

uploadService代码

package com.yy.service;import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import com.yy.dto.UploadDto;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class UploadService {@Value("${upload.path}")private String uploadPath;@Value("${upload.domain}")private  String uploadDomain;public String uploadAll(UploadDto uploadDto) {String name = uploadDto.getName();String base64 = uploadDto.getBase64();String[] base64Array = StrUtil.splitToArray(base64, "base64,");byte[] bytes = Base64.decode(base64Array[1]);//设置图片名称前使用唯一id,防止名字重复name = IdUtil.fastSimpleUUID()+"_"+name;//在保存汉字时使用拼音,汉字可能不兼容,例如iosname = PinyinUtil.getPinyin(name, "");FileUtil.writeBytes(bytes,uploadPath+name);return uploadDomain+"/images/"+name;}
}

效果:

相关文章:

使用base64通用文件上传

编写一个上传文件的组件 tuku,点击图片上传后使用FileReader异步读取文件的内容&#xff0c;读取完成后获得文件名和base64码&#xff0c;调用后端uploadApi,传入姓名和base64文件信息&#xff0c;后端存入nginx中&#xff0c;用于访问 tuku.ts组件代码&#xff1a; <templa…...

Python深度学习

python深度学习&#xff0c;python代码定制&#xff0c; 可做创新点 创新思路 代码改进跑通 深度学习 Python代跑时间序列预测 分析 代码编写 python编程 深度学习算法 自然语言处理 神经网络跑通指导 爬虫调试代做 项目指导 定制帮做 改进 提升 创新 优化 Python Matlab C…...

django报错(三):No crontab program或got an unexpected keyword argument ‘user’

Crontab是linux系统上的定时管理模块&#xff0c;简单配置&#xff0c;灵活使用。但是要在windows使用必须借助Cygwin等虚拟工具&#xff0c;否则会报错“No crontab program”。如下图&#xff1a; python-crontab是其提供了python模块对crontab的访问&#xff0c;即可以通过p…...

数据库(创建数据库和表)

目录 一&#xff1a;创建数据库 二&#xff1a;创建表 2.1&#xff1a;创建employees表 2.2&#xff1a;创建orders表 2.3&#xff1a;创建invoices表 一&#xff1a;创建数据库 mysql> create database mydb6_product; Query OK, 1 row affected (0.01 sec) mysql&g…...

Log4j的原理及应用详解(一)

本系列文章简介&#xff1a; 在软件开发的广阔领域中&#xff0c;日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程&#xff0c;还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂&#xff0c;对日志管理的需求也日…...

ubuntu系统Docker常用命令

1.查看docker是否开机启动 sudo systemctl list-unit-files | grep enable|grep docker 2.设置开机启动 sudo systemctl enable docker 3.关闭docker开机启动 sudo systemctl disable docker 4.开启docker服务 sudo service docker start 5.关闭docker服务 sudo servi…...

韦东山嵌入式linux系列-驱动设计的思想(面向对象/分层/分离)

1 面向对象 字符设备驱动程序抽象出一个 file_operations 结构体&#xff1b; 我们写的程序针对硬件部分抽象出 led_operations 结构体。 2 分层 上下分层&#xff0c;比如我们前面写的 LED 驱动程序就分为 2 层&#xff1a; ① 上层实现硬件无关的操作&#xff0c;比如注册…...

0/1背包

0/1背包 背包问题是DP最经典的类型之一&#xff0c;而0/1背包是最经典最基础的背包问题。 背包体积为 V V V&#xff0c; n n n种物品&#xff0c;每种物品只有1个&#xff0c;第 i i i种物品对应体积为 c i c_i ci​&#xff0c;价值为 w i w_i wi​&#xff0c;怎样装填能使…...

Linux的进程和权限的基本命令

目录 基本命令 man find date cal du ln exit grep 基本命令-帮助查询&#xff1a; wc cat more less head tail echo alias unalias 基本命令-进程管理&#xff1a; ps kill top 操作系统负载查看 用户分类&#xff1a; 程序用户 普通用户&#x…...

鼠标录制工具怎么挑选?9款电脑鼠标录制工具分享(2024)

你知道鼠标录制工具吗&#xff1f;鼠标录制工具通过记录和回放用户的操作&#xff0c;帮助自动化重复性任务&#xff0c;提高工作效率和精确性。它可以帮助用户简化很多繁琐的操作步骤&#xff0c;非常适合运用在电脑自动化任务、游戏自动化中&#xff0c;给大家整理了2024年9款…...

C1W4.LAB.Vector manipulation+Hash functions and multiplanes

理论课&#xff1a;C1W4.Machine Translation and Document Search 文章目录 Python 中的矢量操作Transforming vectorsExample 1Example 2 Frobenius Norm Hash functions and multiplanesBasic Hash tablesPlanesHash Function with multiple planesRandom PlanesDocument v…...

YOLOv8改进 | 检测头 | 融合渐进特征金字塔的检测头【AFPN4】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…...

数据采集监控平台:挖掘数据价值 高效高速生产!

在当今数字化的时代&#xff0c;数据已成为企业非常宝贵的资产之一。然而&#xff0c;要充分发挥数据的潜力&#xff0c;离不开一个强大的数据采集监控平台&#xff0c;尤其是生产制造行业。它不仅是数据的收集者&#xff0c;更是洞察生产的智慧之眼&#xff0c;高效高速处理产…...

【算法笔记自学】第 9 章 提高篇(3)——数据结构专题(2)

9.1树与二叉树 #include <cstdio>int main() {int n, m;scanf("%d%d", &n, &m);printf(n m 1 ? "Yes" : "No");return 0; } 9.2二叉树的遍历 #include <cstdio> #include <vector> using namespace std;const int…...

Objective-C 中字符串的保存位置

在 Objective-C 中&#xff0c;字符串常量和动态创建的字符串&#xff08;例如通过 stringWithFormat:、initWithString: 等方法创建的字符串&#xff09;在内存中保存的位置一样么 &#xff1f; 在 Objective-C 中&#xff0c;字符串常量和动态创建的字符串在内存中的保存位置…...

git 想要创建一个新的本地分支并检出远程分支的内容

如果你想要创建一个新的本地分支并检出远程分支的内容&#xff1a; git checkout -b feature-branch origin/feature-branch feature-branch 是你在本地创建的新分支名&#xff0c;origin/feature-branch 是远程分支的引用。 根据你检出的远程分支的名字而定 不知道名称的时…...

C语言学习笔记[24]:循环语句while②

getchar()的使用场景 int main() {char password[20] {0};printf("请输入密码&#xff1a;");//输入 123456 后回车scanf("%s", passwoed);//数组名本身就是数组地址printf("请确认密码&#xff1a;Y/N");int ch getchar();if(Y ch)printf(&…...

安全运营概述

安全运营概述 概述安全运营的工作对内安全运营工作对外安全运营工作品牌建设 概述 安全是一个过程&#xff0c;安全是靠运营出来的&#xff0c;公司会不断的有新业务的变更&#xff0c;新产品的发布&#xff0c;新版本的升级&#xff0c;技术架构的升级&#xff0c;底层系统的…...

spring-cloud和spring-cloud-alibaba的关系

首先Spring Cloud 是什么&#xff1f; Spring Cloud是一系列框架的有序集合&#xff0c;它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发。Spring Cloud提供了微服务架构开发所需的多种组件和工具&#xff0c;如服务发现注册、配置中心、消息总线、负载均…...

持续集成06--Jenkins构建触发器

前言 在持续集成&#xff08;CI&#xff09;的实践中&#xff0c;构建触发器是自动化流程中不可或缺的一环。它决定了何时启动构建过程&#xff0c;从而确保代码变更能够及时地得到验证和反馈。Jenkins&#xff0c;作为业界领先的CI/CD工具&#xff0c;提供了多种构建触发器选项…...

库存分析怎么做?库存分析进阶3大法:ABC、CVA、IQR

一提到库存分析&#xff0c;很多人第一反应就是ABC分类法。听着是不是很熟&#xff1f;但说实话&#xff0c;如果只会这一招&#xff0c;现在可能不太够用了。最近我发现&#xff0c;很多企业的SKU数量翻着倍涨&#xff0c;市场波动也越来越没规律。靠老经验和统一规则去管库存…...

专业MTK设备Bootloader解锁与安全绕过技术指南

专业MTK设备Bootloader解锁与安全绕过技术指南 【免费下载链接】mtkclient-gui GUI tool for unlocking bootloader and bypassing authorization on Mediatek devices (Not maintained anymore) 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient-gui mtkclient-…...

从零开始构建FPGA项目:ADI HDL开发实战经验分享

从零开始构建FPGA项目&#xff1a;ADI HDL开发实战经验分享 【免费下载链接】hdl HDL libraries and projects 项目地址: https://gitcode.com/gh_mirrors/hd/hdl ADI HDL&#xff08;Analog Devices HDL&#xff09;是一套功能强大的硬件描述语言库&#xff0c;专为FPG…...

告别复制粘贴!手把手教你封装可复用的Echarts-for-weixin图表组件

微信小程序Echarts组件化实战&#xff1a;打造高复用图表解决方案 在数据驱动的产品设计中&#xff0c;图表可视化已成为微信小程序不可或缺的组成部分。面对多页面复用、动态数据更新等实际需求&#xff0c;直接使用原生ec-canvas组件往往会导致代码冗余和维护困难。本文将分享…...

Proteus仿真进阶:用STM32F103驱动L298,深入理解PWM占空比与电机速度的映射关系

Proteus仿真进阶&#xff1a;用STM32F103驱动L298&#xff0c;深入理解PWM占空比与电机速度的映射关系 在嵌入式开发中&#xff0c;电机控制是一个经典且实用的课题。很多教程会告诉你如何通过STM32的PWM输出让电机转起来&#xff0c;但很少有人解释为什么代码中会出现"10…...

SpringBoot项目实战:5分钟集成EasyExcel,搞定带复杂合计与中文金额的Excel导出

SpringBoot实战&#xff1a;5分钟集成EasyExcel实现智能Excel导出 在企业管理系统的开发中&#xff0c;Excel导出几乎是每个项目都会遇到的刚需功能。传统POI操作Excel的繁琐代码让很多开发者头疼不已&#xff0c;而Alibaba开源的EasyExcel则彻底改变了这一局面。本文将带你用S…...

手把手教你用YOLOv5/PyTorch在DOTA V1.5数据集上训练自己的航拍目标检测模型

从零构建航拍目标检测模型&#xff1a;YOLOv5DOTA V1.5实战指南 当无人机镜头掠过城市上空&#xff0c;传回的40004000像素高清图像中&#xff0c;棒球场、港口集装箱、高速公路立交桥等目标如何被精准识别&#xff1f;本文将带您用YOLOv5框架&#xff0c;在包含18.8万实例的DO…...

面试官:你知道的限流算法有哪些?

为什么要有限流 一般做接口限流主要是为了应对突发流量,避免突发流量拖垮服务。如下面一些场景就有可能发生突发流量 微博热搜 恶意刷单 恶意爬虫 促销活动 接口限流的算法有如下几种 固定窗口计数器算法 这是最简单的限流算法。它将时间划分为固定的周期(窗口),并在每个…...

用P4和BMv2在Ubuntu上快速搭建一个可编程三层交换机(附完整代码和避坑指南)

用P4和BMv2在Ubuntu上构建可编程交换机的实战指南 当传统网络设备无法满足灵活的业务需求时&#xff0c;P4语言正在重新定义网络数据平面的可能性。想象一下&#xff0c;你可以在30分钟内将一台普通Ubuntu机器变成支持自定义转发逻辑的三层交换机——这正是P4带来的变革力量。本…...

给算法新手画张图:用Python可视化MOEAD的切比雪夫分解,5分钟搞懂等高线

用Python可视化MOEAD的切比雪夫分解&#xff1a;5分钟搞懂等高线原理 第一次接触多目标优化算法时&#xff0c;我被各种数学公式和抽象概念绕得晕头转向。直到有一天&#xff0c;我尝试用Python把算法原理画出来&#xff0c;那些看似复杂的理论突然变得清晰可见。本文将带你用M…...