vue3+ant design vue实现文件上传(阿里云oss)~

news2024/11/16 23:56:55

1、效果图

2、自定义上传

<a-upload
v-model:file-list="fileList"
name="导入员工"
action=""
:customRequest="upDown"
:beforeUpload="beforeUpload"
:onChange="handleChange"
@remove="removeFile"
accept=".xlsx,.xls"
>
  <a-button class="btn btn_width" type="primary"> 上传Excel </a-button>
</a-upload>

import {
    queryAutograph,
    uploadOss,
  } from '@/api/import';
// 存储文件
  const fileList = ref<any[]>([]);
  // 导入文件
  const upDown = async (file) => {
    const random = Math.random();
    const fileName = `${random}${file.file.name}`;
    //获取oss签名
    queryAutograph({}).then(async (res) => {
//根据后端上传接口按需解构(这里是oss上传)
      const { host, dir, OSSAccessKeyId, success_action_status, Signature, policy } = res;
      const address = dir + fileName;
      const url = host;
      const formData = new FormData();
      formData.append('key', address);
      formData.append('OSSAccessKeyId', OSSAccessKeyId);
      formData.append('Signature', Signature);
      formData.append('policy', policy);
      formData.append('success_action_status', success_action_status);
      formData.append('file', file.file);//这里必须放在最后,上面的顺序不限制
      // 上传OSS
      try {
        await uploadOss({ url, formData });
      } catch (e) {
        message.error('上传失败');
        return;
      }
        //拼接文件地址,用来传递给后端接口
      downloadUrl.value = host + '/' + address;
      let list: any = [];
      list.push({ name: file.file.name, url: downloadUrl });
      // fileList.value = list.flatMap((item) => item.url);
      fileList.value = list;
    });
  };

// 删除文件
  const removeFile = (file) => {
    const index = fileList.value.indexOf(file.file);
    const newFileList = fileList.value.slice();
    newFileList.splice(index, 1);
    fileList.value = newFileList;
    console.log('删除成功:', fileList.value);
  };
// 文件上传测试
  import { message } from 'ant-design-vue';
  // 检查文件类型,如果文件类型正确,则继续上传,false指停止上传,true指继续上传,file是文件
  const beforeUpload = (file) => {
    // // 检查文件类型是否为Excel
    const isExcel =
      file.type === 'application/vnd.ms-excel' ||
      file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
    if (!isExcel) {
      message.error('只能上传Excel文件!');
      return false;
    }
    return true;
  };
import { request } from '@/utils/request';
const VUE_APP_OSS_API = process.env.VUE_APP_OSS_API;
const VUE_APP_VOICE_API = process.env.VUE_APP_VOICE_API;

// OSS上传签名
export function queryAutograph(params) {
  return request({
    url: `${VUE_APP_VOICE_API}/oss/getSign`,
    method: 'get',
    params,
  });
}
// 上传OSS 请求
export const uploadOss = ({ url, formData }) => {
  const pro = process.env.NODE_ENV === 'development' ? VUE_APP_OSS_API : url;
  return request({
    url: pro,
    method: 'post',
    data: formData,
    headers: { 'Content-Type': 'multipart/form-data' },
  });
};

 3、思路:做文件上传时,一般使用自定义上传行为,用来覆盖默认行为,首先创建new FormData();及相关上传参数,并调用oss签名接口,拿到返回的host值之后拼接文件地址便于后面调用添加接口上送。(注意:这里使用的阿里云oss上传时,若遇到404情况,可考虑不使用代理,直接直传)

4、若不使用阿里云oss做文件上传时,可不需获取签名,创建完new FormData();及相关参数之后,直接调用后端上传接口即可。

// 存储文件
  const fileList = ref<any[]>([]);
  // 导入文件
  const upDown = async (file) => {
    fileList.value = [];
    fileList.value.push(file.file);
    const formData = new FormData();
    formData.append('file', fileList.value[0]);
    await importData(formData)
      .then((res) => {
        message.info('文件上传成功');
        // downloadUrl.value = `${platformApi}/dataCockpit/out/common/get-sheet-from-excel`;
        console.log('导入成功:', res);
        console.log('文件列表:', fileList.value);
      })
      .catch((err) => {
        message.error(err);
      });
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自然语言处理】实验一:基于NLP工具的中文分词

目录 前言 1. 导入jieba分词器 2. 用精确模式进行中文分词 3. 用全模式进行中文分词 4. 用搜索引擎进行中文分词 5. 利用 lcut返回结果列表(list) 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &a…

Typora调整图片大小的两种方式:zoom或width/height

目录 01 zoom方式02 width/height方式2.1 width方式 2.2 height方式 01 zoom方式 语法: <img src"your-image-url" style"zoom:your-zoom-integer"/> 示例&#xff1a;将图片(./image/market.jpg)调整为原图减少50%大小的命令为&#xff1a; …

解决 Ubuntu 20.04 上 Fail2Ban 启动失败问题:指定 systemd 后端

问题描述 服务器Ubuntu 20.04开启fail2ban失败&#xff0c;通过journactltl -f查看日志发现错误ERROR Failed during configuration: Have not found any log file for sshd jail。大致的原因就是fail2ban找不到sshd的日志文件。 Sep 09 09:52:17 test systemd[1]: Starting …

时间控制器

前言&#xff1a; 在web自动化测试中未免会遇到时间控制器&#xff0c;下面介绍三种实现方式&#xff1b;亲测成功&#xff1b; 时间控件&#xff1a; 第一种&#xff1a;通过点击和if语句联合使用 self.base_click(start_date_out) time.sleep(2) self.base_click(start_da…

【Java 输入流详解:局部与全局定义及资源管理】

Java 输入流详解&#xff1a;局部与全局定义及资源管理 在Java编程中&#xff0c;输入流&#xff08;如Scanner类&#xff09;是读取用户输入的常用方式。通过Scanner&#xff0c;可以方便地读取不同类型的数据&#xff0c;比如整数、字符串等。作为基于输入流的工具&#xff0…

【python】数据结构与算法简介及单链表实现

数据结构和算法 简介: ​ 数据结构是存储和组织数据的一种方式,算法是位实现业务目的的各种方法和思路,作用是大大提升程序性能 1.算法的特性: ​ 1.独立性: 算法是独立存在的一种解决问题的方法和思想对于算法而言;实现的语言并不重要&#xff0c;重要的是思想;算法可以有…

【中间件】-容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么&#xff1f; K8s的架构原理 控制平面(Control plane) kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager 小结 节点组件(Node) container runtime Pod kubelet ku…

视频加密软件哪个最好用?怎么对视频文件设置加密?公司视频文件加密的最佳选择!

视频文件是企业信息传递与存储的重要载体&#xff0c;这些视频文件不仅涵盖了员工培训资料、产品演示视频、客户沟通记录等关键业务内容&#xff0c;还可能包含商业秘密、技术专利等敏感信息。 因此&#xff0c;确保视频文件的安全性&#xff0c;防止未经授权的访问、篡改或泄…

7.1图像平移

目录 实验原理 示例代码&#xff11; 运行结果&#xff11; 示例代码&#xff12; 运行结果&#xff12; 实验原理 OpenCV中&#xff0c;图像平移是一种基本的几何变换&#xff0c;指的是将图像中的每一个像素点沿着水平方向或垂直方向移动一定的距离。图像平移不改变图像…

C++位图的实现与详解

1.位图概念 在讲解位图之前我们先来看一道很经典的面试题。 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 我们有以下两种种解决方法&#xff1a; 1. 遍历&#xff0c;时间复杂度O(N)。&#xff0…

如何在红米手机中恢复已删除的照片?(6 种方式可供选择)

凭借出色的相机和实惠的价格&#xff0c;小米红米系列已成为全球知名品牌。但是&#xff0c;最近有些人抱怨他们在 红米设备上丢失了许多珍贵的图片或视频&#xff0c;并希望弄清楚如何从小米手机恢复已删除的照片。好吧&#xff0c;在小米设备上恢复已删除的视频/照片并不难。…

RK3576芯片在智能家居里中型智慧屏产品的应用方案分析

智能家居在近年来得到了快速发展&#xff0c;AI技术不断发展&#xff0c;人机交互十分成熟&#xff0c;各种家电也都迎来了智能化浪潮&#xff0c;智能家居为人们提供了优秀的产品体验&#xff0c;受到主流消费者的青睐&#xff0c;智能家居里的中型智慧屏产品也随之兴起。 瑞芯…

HTTrack

--不破不立 HTTrack 是一个免费开源的网站离线浏览器。通过它可以将整个网站下载到本地的某个目录&#xff0c;包括 html、图片和脚本以及样式文件&#xff0c;并对其中的链接进行重构以便于在本地进行浏览。 1.官网下载地址&#xff1a;https://www.httrack.com/page/2/en/in…

通信工程学习:什么是FMC固定移动融合

FMC&#xff1a;固定移动融合 FMC固定移动融合&#xff0c;即Fixed Mobile Convergence&#xff08;固定移动网络融合&#xff09;&#xff0c;是指通过固定网络与移动网络之间的融通、合作&#xff0c;实现全业务及融合业务的经营。这一技术旨在打破传统固定网络和移动网络之间…

设计模式-面试题(工厂方法模式、策略模式和责任链模式)

开闭原则&#xff1a;扩展开放、修改关闭 工厂设计模式&#xff1a;解耦 简单工厂模式 CoffeeStore和SimpleCoffeeFactory的耦合、SimpleCoffeeFactory和Coffee的耦合 后续如果再加新品种的咖啡&#xff0c;需要修改SimpleCoffeeFactory&#xff0c;这样就违反了开闭原则 简单…

探探我对测试开发的看法?

测试开发岗位主要负责确保软件的可用性和稳定性。 ● 可用性不仅包括功能的正常使用&#xff0c;还涵盖了软件在不同环境下的兼容性&#xff0c;如各种网络环境、不同 CPU 核心环境以及多样化的移动端设备等。 ● 稳定性方面我的理解是&#xff0c;测试人员不仅要从用户角度评判…

Mac无法安装软件怎么解决?mac安装软件提示无法验证开发者怎么办

在使用 macOS 系统时&#xff0c;你可能会遇到一个常见的问题&#xff1a;当你尝试安装或打开某些应用程序时&#xff0c;系统会弹出一个警告&#xff0c;提示“无法验证开发者”。出现这个提示导致自己无法去进行程序安装&#xff0c;接下来我们就来看看如何解决此问题的方法吧…

windows下载nvm并使用合集

下载nvm之前是要把node卸载的&#xff0c;不然会安装不成功 下面我先把nvm地址放上NVM下载 - NVM中文网 按照步骤按照完了一会可以使用一下命令来检查是否安装成功 nvm 安装成功后会出来版本号 下面开始安装node版本&#xff0c;很多朋友一上来直接下载node会报错 问题分析 …

【C++】_list常用方法解析及模拟实现

相信自己的力量&#xff0c;只要对自己始终保持信心&#xff0c;尽自己最大努力去完成任何事&#xff0c;就算事情最终结果是失败了&#xff0c;努力了也不留遗憾。&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;什么是list&…

【EST】:Pt/ZrO2单原子催化剂

摘要&#xff1a;制备稳定的单原子催化剂一直是环境催化领域去除各种污染物的研究热点&#xff0c;但在提高反应性和稳定性方面仍存在挑战。在此&#xff0c;通过在锆氧化物负载的铂催化剂&#xff08;Pt–Na/ZrO2&#xff09;中简单掺杂碱金属&#xff0c;成功制备了与碱金属通…