Arco Design vue3+typescript图片上传七牛云

Vue3 + Acro-Design上传图片回显 Vue3 + Acro-Design上传图片回显使用笔记 阅读详情

环境

vue3+typescript+arcodesign vue+openapi生成接口

需求

前端使用arco design 的文件上传组件a-upload上传到七牛云进行对象存储,前端api由openapi生成

template

<a-upload
                  action="/"
                  name="file"
                  :fileList="file ? [file] : []"
                  :show-file-list="false"
                  @change="onChange"
                  @progress="onProgress"
                >
                  <template #upload-button>
                    <div
                      :class="`arco-upload-list-item${
                        file && file.status === 'error'
                          ? ' arco-upload-list-item-error'
                          : ''
                      }`"
                    >
                      <div
                        class="arco-upload-list-picture custom-upload-avatar"
                        v-if="file && file.url"
                      >
                        <img :src="file.url" />
                        <div class="arco-upload-list-picture-mask">
                          <IconEdit />
                        </div>
                        <a-progress
                          v-if="
                            file.status === 'uploading' && file.percent < 100
                          "
                          :percent="file.percent"
                          type="circle"
                          size="mini"
                          :style="{
                            position: 'absolute',
                            left: '50%',
                            top: '50%',
                            transform: 'translateX(-50%) translateY(-50%)',
                          }"
                        />
                      </div>
                      <div class="arco-upload-picture-card" v-else>
                        <div class="arco-upload-picture-card-text">
                          <IconPlus />
                          <div style="margin-top: 10px; font-weight: 600">
                            Upload
                          </div>
                        </div>
                      </div>
                    </div>
                  </template>
                </a-upload>

script

const file = ref();

const onChange = (_: any, currentFile: FileItem) => {
  file.value = currentFile;
  // file.value = new File([currentFile], "pic.jpg");
  // console.log(file);
  var response = FileControllerService.uploadPicUsingPost(currentFile.file);
  if (response.code === 0) {
    message.success("上传成功" + response.data);
  } else {
    message.error("上传失败:" + response.data);
  }
};
const onProgress = (currentFile: Blob) => {
  file.value = currentFile;
  message.info("上传中");
};

主要是currentFile的类型要写对,我前端学的少真的废了很多时间

api

 /**
   * uploadPic
   * @param file file
   * @returns BaseResponse_string_ OK
   * @returns any Created
   * @throws ApiError
   */
  public static uploadPicUsingPost(
    file: Blob
  ): CancelablePromise<BaseResponse_string_ | any> {
    return __request(OpenAPI, {
      method: "POST",
      url: "/api/file/uploadPic",
      formData: {
        file: file,
      },
      errors: {
        401: `Unauthorized`,
        403: `Forbidden`,
        404: `Not Found`,
      },
    });
  }

java controller


 @PostMapping("/uploadPic")
    public BaseResponse<String> uploadPic(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request) {
        if (multipartFile == null) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "上传文件为空" + multipartFile.toString());
        }

        String filename = multipartFile.getOriginalFilename();
        String contentType = multipartFile.getContentType();
        long size = multipartFile.getSize();

        log.info("文件:" + filename + " 上传");

        if (!contentType.equals("image/jpeg") && !contentType.equals("image/png") && !contentType.equals("image/jpg")) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "不支持的文件类型:" + contentType.toString());
        }
        log.info("文件格式:" + contentType);

        if (size > 5 * 1024 * 1024) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "文件大小应不超过5MB");
        }
        log.info("文件大小:" + size);

        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.region0());
        // 指定分片上传版本
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;
        //...其他参数参考类注释

        UploadManager uploadManager = new UploadManager(cfg);
        //...生成上传凭证,然后准备上传

        //
        String imgURL = "";

        //默认不指定key的情况下,以文件内容的hash值作为文件名
        String key = null;


        InputStream inputStream = null;
        try {
            inputStream = multipartFile.getInputStream();
            Auth auth = Auth.create(accessKey, secretKey);//创建凭证
            String upToken = auth.uploadToken(bucket); //上传凭证
            //修改6 put方法 第一个参数 要放上面 自己定义的 inputStream对象
            Response response = uploadManager.put(inputStream, key, upToken, null, null);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
//            System.out.println(putRet.key);
//            System.out.println(putRet.hash); // hash值就是上传后的图片名字

            //todo 把图片URL写入数据库
            imgURL = baseURL + putRet.hash;
            log.info("上传成功,图片地址" + imgURL);
        } catch (IOException e) {
            e.printStackTrace();
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "文件读取失败");
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        // 对上传的图片进行处理,例如保存到数据库等操作

        return ResultUtils.success(imgURL);

    }
 

参考🔗

https://blog.youkuaiyun.com/m0_54409739/article/details/134889798

AHB不对称半桥反激电路设计(三)主要器件参数规格计算 本文介绍了AHB拓扑变压器的设计步骤与核心参数计算,包括主控芯片选择、工作原理分析及参数计算。作者选择DK87XXD集成MOS方案,详细阐述了输入电压范围、反射电压限定、匝比计算、工作频率设定、原副边电流值、电感量计算、磁芯选择、匝数计算、谐振电容设计等关键步骤。通过公式推导与实例计算,展示了150W电源的变压器设计过程,最终确定匝比5.5、原边22匝、副边4匝、电感量200uH等参数。文章还讨论了谐振电容与漏感的关系,为后续调试提供理论基础。该设计方法结合理论分析与工程实践,适用于AHB拓扑电源开发。 阅读详情

相关推荐

【ESP32 S3 开发】基于I2S协议驱动INMP441数字麦克风 实现语音采集

注意INMP441的 L/R接地之后才稳定输出数据 否则一直都是0WAV格式说明这里主要是想说wav文件重要的就是生成一个wavhead来标识它是一个wave文件,wave文件的data chunk 中的data部分还是PCM编码格式的数据,直接从I2S读进去就可以,不需要压缩。wav文件的头一般由4个chunk组成。 以16bit深度为例,代码如下。其他深度可以根据注释自行计算。 I2S -> DAC i2s_read()函数,向flash中划分的一个buff当中读入byte数组。以16bit深度为例,一

m0_43395703的博客 1万+

arco-designUI库upload实现进度条加载

上传视频实现进度条加载

weixin_47093559的博客 1879

Windows Server+SqlServer Always On实战:5步搞定高可用集群搭建

本文详细介绍了在Windows Server环境中,通过5个关键步骤搭建SQL Server Always On高可用集群的实战指南。内容涵盖从底层故障转移集群配置、SQL Server实例启用Always On功能,到创建可用性组和侦听器的完整流程,并提供了核心运维与故障排查思路,帮助企业构建稳定可靠的数据库高可用架构。

milk5的博客 858

arco.design(字节ui库)自定义上传限制文件类型和数量例子

arco.design(字节ui库)自定义上传限制文件类型和数量例子 <a-upload :file-list="form.maininformation" :action="Activity" //上传接口配置 @success="uploadfile" @before-upload="beforeUpload" @before-remove="deletedata" /> // 上传文件前校验 function beforeUpload(resolve) { l

王佩健的博客 3781

AD20 Channel-Offset Error 解决办法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言AD20 PCB相同电路模块ROOM格式复用时出现 Channel-Offset Error 解决办法一、问题现象二、解决办法 前言 AD20 PCB相同电路模块ROOM格式复用时出现 Channel-Offset Error 解决办法 一、问题现象 我们经常在使用Room格式快速布局相同模块电路时出现以下问题, 二、解决办法 相同模块电路PCB布局复制的过程网上有很多,这里不再做赘述,步骤都差不多,只说问题根源; 1:.

m0_47201213的博客 7624

让 ABAP 复杂内表优雅“喂饱”:Complex Internal Table Filling 全面实战指南

本文为ABAP开发者系统梳理了复杂内表的填充与复制方法。重点介绍了work area的两种声明方式、APPEND操作的多形态用法及其初始值语义,以及VALUE #( )构造器的逐行与整表写法。同时讲解了CORRESPONDING的同名字段映射功能,帮助开发者在"航司与航线"等复杂业务场景中实现最佳实践。文章还涵盖内存优化、可读性建议和常见误区,提供可运行样例,适用于ABAP On-Premise和SAP BTP环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

基于Vue使用Arco Design组件封装一个七牛云上传图片的函数

七牛云上传图片

m0_55301924的博客 2261

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

本文提出将AdaFocalLoss损失函数应用于YOLO26模型优化,有效提升小目标检测性能。AdaFocalLoss通过目标尺寸感知机制和IoU引导的动态调节,自动调整训练权重和聚焦程度,解决了样本不平衡问题。相比传统损失函数,它无需手动调参,能增强训练稳定性,在多尺度、复杂场景下表现优异。文章详细介绍了AdaFocalLoss的原理、优势及实现方法,并提供了代码集成指南。实验表明该方法能显著提升检测精度和鲁棒性,特别适用于小目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 337

@arco.design upload 组件删除已上传文件增加tooltip二次询问

【代码】@arco.design upload 组件删除已上传文件增加tooltip二次询问。

weixin_45152848的博客 642

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 760

在 ABAP Cloud 里优雅读取与解析 XML:用 sXML Reader 把接口数据落成结构化 ABAP

ABAP Cloud中XML解析实践 摘要:本文介绍了在ABAP Cloud环境下解析XML数据的最佳实践。针对企业系统中常见的XML格式数据,文章推荐使用sXML库中的CL_SXML_STRING_READER进行流式解析,而非传统的DOM方式。重点解析了命名空间(Namespace)、属性(Attribute)和CDATA等关键概念的处理方法,并比较了两种读取属性的策略:通扫所有属性(NEXT_ATTRIBUTE)和精准取值(GET_ATTRIBUTE_VALUE)。文章提供了完整的ABAP Cloud

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 190

vue3+vue-cropper+Acrodesign截图组件封装

4、目前根据项目需求写的固定尺寸,其他相关配置可。如图所示:裁剪广告图片类型为bannerType值为1,375*200。3、截取图片实时回显及编辑回显。相关功能:1、上传图片地址,相关服务器地址自行配置。1、封装的bl-form表单。

Hanwener的博客 664

Dify 本地插件安装失败?别慌,这篇教程手把手教你解决(解决 the plugin you want to install has a bad signature 报错的问题)

🤯dify安装本地插件报错 PluginDaemonBadRequestError: plugin verification has been enabled, and the plugin you want to install has a bad signature。的解决方案!

XiaoqiangClub的博客 3985

上传图片文件以及回显

1.编写文件处理工具类 package com.nari.dms.cloud.util; import java.io.File; import java.io.IOException; /** * @author wsh * @create 2021-05-31 9:45 * @desc 文件相关操作 **/ public class FileUtil { /** * 创建文件夹 * @param filePath 文件路径 * @return fa

weixin_40778686的博客 502

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

@arco.design upload 已上传文件,点击删除 popconfirm 询问删除

官方给的例子是更换图标,这里借助 h 函数返回的 vnode。借助 upload 的 两个属性。既然是 vnode,那就好办了。这里要缓存一下要删除的文件,

weixin_45152848的博客 871

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

初探vue3.0 + ts + Arco design pro mock 模拟数据增删改查

arco design pro mock 数据流程 1 /src/mock目录下新建 一个 ts文件 以模块名命名 import Mock from 'mockjs'; // 引入mock模块 // 以及setupMock启动函数 { ... } 是返回参数模板,自定义 import setupMock,{successpageResponseWrap,successdeleteResponseWrap} from '@/utils/setup-mock'; // 模板如下格式 /src/ut

qq_44434408的博客 2754

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

封装一个表单组件(ArcoDesign+vue3)

表单统一封装

Holly31的博客 2270

同时选中多个文件上传的一次性校验(arco举例)

arco的Upload组件对一次性上传多个的文件校验是使用On-before-upload一个一个文件进行校验,一般的错误提示可以根据次数来进行界定,比如有多个文件超过限制大小提示。

qq_63520243的博客 441

vue3 + ts + element plus 实现自定义分片上传组件以及上传进度弹窗

vue3 + typescript + elementplus 开发的后台管理系统,由于多个页面需要上传图片/视频/音频,所以将上传逻辑写成一个公共组件,如果上传文件超过5M,则需要分片上传,从0开始分片,前端传递给后台接口参数chunk 0表示第一片,1表示第二片,2表示第三片。:页面点击上传按钮(可自定义传入上传样式)调起电脑的文件选择,选中文件后直接上传后台服务器,页面展示上传进度条。:整体分片上传组件是比较简单的,重点就在计算分片的函数,祝大家永不宕机,永无bug💕💕💕。

国企程序媛 record 前端技术 & review code。。。 1834

react写图片上传

/复制组件上传 进行修改为图片上传 上传不得超过五个。

WYannan的博客 338

V3上传文件

【代码】Vue上传文件。

weixin_67480392的博客 359

vue3自定义图片上传控件(图片上传+图片回显+定义组件宽高)

图片上传在平常前端开发中非常常见,插件市场上也有一些上传图片控件,但是有时候控件并不能达到自己想要的效果,所以有时候需要自己定义一个上传插件,下面就是一个简单的自定义上传控件;主要功能就是一个上传还有图片回显的功能,以及定义上传文件的格式和文件的输出功能。把组件引入到要使用页面或者直接在main.js内设置为全局通用组件都行。

Andy的博客 1362

Vue3上传(Upload)

Vue3上传组件,支持:选择单个文件或多个文件上传;拖拽文件上传;禁用(只能预览);限制上传数量;自定义样式布局;自定义操作完成的消息提示;上传文件校验;自定义上传行为;自定义主题色等;总之,功能丰富,简单易用😁😁

Vue Amazing UI(Vue3 + TypeScript + Vite)组件库唯一开发维护者 1万+

a-upload自定义上传customRequest并接收多个参数

【代码】a-upload自定义上传customRequest并接收多个参数。

weixin_59423550的博客 3622

头像上传功能实现

前端 Arco-design上传组件。使用阿里云OSS对象存储。

m0_56238560的博客 400

Ant Design Vue之自定义上传(Upload)

场景:项目中需要头像上传功能,后端提供的上传接口需要校验token。ant-design-vue框架的upload组件提供了customRequest接口,可以让我们覆盖默认的上传行为,自定义上传。 1.目标实现效果如下 点击相机图标或者图片,打开资源管理器——>选择图片——>头像预览自动更换为最新选择的图片。执行上传之前还需一些图片格式、大小的校验。在此过程中需调用两个接...

hfhwfw161226的博客 2万+
上一篇: ResizeObserver loop completed with undelivered notifications. at handleError (webpack-internal:/
下一篇: var、let 、const的区别
O_O.o
博客等级 码龄6年 27粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值