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

embedded/2024/9/24 12:19:37/

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);//这里必须放在最后,上面的顺序不限制// 上传OSStry {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) => {// // 检查文件类型是否为Excelconst 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.ppmy.cn/embedded/109877.html

相关文章

【编程基础知识】Spring过滤器、拦截器、AOP区别

一、过滤器: 过滤器拦截的是URL&#xff08;HTTP请求&#xff0c;一次请求包含了请求和响应&#xff09; Spring中自定义过滤器&#xff08;Filter&#xff09;一般只有一个方法&#xff0c;返回值是void&#xff0c;当请求到达web容器时&#xff0c;会探测当前请求地址是否配…

【HarmonyOS】头像圆形裁剪功能之手势放大缩小,平移,双击缩放控制(三)

【HarmonyOS】头像裁剪之手势放大缩小&#xff0c;平移&#xff0c;双击缩放控制&#xff08;三&#xff09; 一、DEMO效果图&#xff1a; 二、开发思路&#xff1a; 使用矩阵变换控制图片的放大缩小和平移形态。 通过监听点击手势TapGesture&#xff0c;缩放手势PinchGes…

云服务器部署DB-GPT项目

本文收录于《DB-GPT项目》专栏&#xff0c;专栏总目录&#xff1a; 点击这里。 文章目录 项目介绍 一、登录云服务器 1. 进入控制台 2.点击容器实例&#xff08;点数字&#xff09; 二、创建容器实例 1. 等待容器实例创建好&#xff0c;创建好的容器实例如下&#xff1a;…

[含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)

关说不练假把式&#xff0c;在上一&#xff0c;二篇中介绍了我心目中的CRUD的样子 基于之前的理念&#xff0c;我开发了一个命名为PasteTemplate的项目&#xff0c;这个项目呢后续会转化成项目模板&#xff0c;转化成项目模板后&#xff0c;后续需要开发新的项目就可以基于这…

阿里云镜像报错 [Errno 14] HTTP Error 302 - Found 问题解决记录

1、问题背景和解决思路 在本地安装 CentOS7 后&#xff0c;网络已调通可正常上网&#xff0c;但切换阿里云镜像后&#xff0c;使用 yum 安装软件时出现 “[Errno 14] HTTPS Error 302 - Found Trying other mirror.” 报错&#xff0c;原因是 yum 源配置问题。给出了详细的解决…

SQL优化(二)统计信息

收集统计信息 数据库的统计信息非常重要&#xff0c;如果没有正确地收集表的统计信息&#xff0c;或者没有及时地更新表的统计信息&#xff0c;SQL就有可能走错执行计划&#xff0c;也就会出现性能问题。 统计信息主要分为表的统计信息、列的统计信息、索引的统计信息、系统的…

MT6895(天玑8100)处理器规格参数_MTK联发科平台方案

MT6895平台 采用台积电5nm工艺&#xff0c;与天玑 8000 相比性能提升 20% &#xff0c;搭载4 个 2.85GHz A78 核心 4 个 2.0GHz A55 核心&#xff0c;CPU能效比上一代提高 25% 。GPU 采用了第三代的Valhall Arm Mali-G610 MC6架构&#xff0c;拥有6核心&#xff0c;搭配天玑81…

ECOLOGY携带BearerToken后根据手机号码获取北森系统人员id

需求:获取北森系统的人员id 核心代码: package com.kaka.beisen;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets;p…