文件上传到oss上以及下载

<template><!-- 批量渠道变更 --><div><div style="margin-bottom: 10px; display: flex;"><Download name="下载模板" type="Url" url="https://file.wonder-link.net/%E6%89%B9%E9%87%8F%E6%B8%A0%E9%81%93%E5%8F%98%E6%9B%B4.xlsx"><dev-button type="primary">下载模板</dev-button></Download><el-upload:auto-upload="false":on-change="(val: any) => {beforeUpload(val)}":show-file-list="false"><el-button type="primary">批量导入</el-button></el-upload></div><div style="padding-bottom: 30px;"><el-tablev-loading="pageLoading":data="tableData" style="width: 100%"border:header-cell-style="{ background: '#eff3f6', textAlign: 'center' }"><el-table-column prop="batchNo" label="批次号" /><el-table-column label="文件名称"><template #default="scope">{{ scope.row.fileName || '-' }}</template></el-table-column><el-table-column label="处理状态"><template #default="scope">{{ scope.row.batchStatusDesc || '-' }}</template></el-table-column><el-table-column label="操作人"><template #default="scope">{{ scope.row.createName || '-' }}</template></el-table-column><el-table-column label="操作时间"><template #default="scope">{{ scope.row.createTime || '-' }}</template></el-table-column><el-table-column fixed="right" label="操作" width="160" align="center"><template #default="scope"><dev-button type="primary" @click="() => getFileUrl(scope.row)" link>下载</dev-button><dev-button v-if="scope.row.batchStatus == 'TO_PROCESS'" link type="primary" @click="passThrough(scope.row, 'pass')">通过</dev-button><dev-button v-if="scope.row.batchStatus == 'TO_PROCESS'" link type="primary" @click="passThrough(scope.row, 'refuse')">拒绝</dev-button></template></el-table-column></el-table><br><div style="float: right;"><el-pagination v-model:current-page="params.pageNo"v-model:page-size="params.pageSize":page-sizes="[10, 20, 30, 40]"background layout="sizes, prev, pager, next" :total="total"@size-change="handleSizeChange"@current-change="handleCurrentChange"/></div></div><ExportButton ref="exportButtonRef" :api="exportApi" :show-button="false" /></div>
</template>
<script setup lang='ts'>
import { reactive, ref, onMounted, nextTick } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import OSS from 'ali-oss';
import {getOssConfig} from '@/api/noticeSettings/upLoadOss';
import {page_list, audit, download_detail, batch_change } from "@/api/operateMent/ChannelChanges";
import Download from '@/components/Download/index.vue';
import ExportButton from '@/components/ExportButton/index.vue';const exportApi = download_detail;
const pageLoading = ref(false);
const total = ref(0);
const tableData = ref([]);
let params: any = reactive({batchNo: '',pageNo: 1,pageSize: 10,
});
const exportButtonRef = ref();
// 初始化
const init = () => {pageLoading.value = true;page_list(params).then((res: any) => {pageLoading.value = false;tableData.value = res.list;total.value = Number(res.total || 0)}).catch(() => {pageLoading.value = false;})
};
const passThrough = (row: any, type: string) => {ElMessageBox.confirm(`是否确认${type == 'pass' ? '通过' : '拒绝'}吗?`,'提示',{confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning',}).then(() => {audit({batchNo: row.batchNo, audit: type == 'pass' ? 1 : 0, }).then(() => {ElMessage.success('操作成功');init();});});
};
const getFileUrl = (item: any) => {exportButtonRef.value.passiveExport({batchNo: item.batchNo});
};
onMounted(() => {init();
});
const handleSizeChange = (val: number) => {params.pageSize = val;init();
};
const handleCurrentChange = (val: number) => {params.pageNo = val;init();
};
const uploadFilledData = ref<any>({});
const client = ref();// oss信息
const beforeUpload = (file: any) => {const rawFile = file.raw;uploadFilledData.value = rawFile;getOssConfig().then((res: any) => {client.value = new OSS({region: res.region,accessKeyId: res.accessKeyId,accessKeySecret: res.accessKeySecret,stsToken: res.securityToken,bucket: res.bucket// 填写Bucket名称。});nextTick(() => {startUploading();});return true;}).catch(()=>{window.$message.error('获取oss信息失败');return false;});
};
const uploadResults = ref<any>({});// 上传结果
// 获取文件名称后缀
const getFileName = (fileName: string) => {const arr = fileName.split('.');return arr[arr.length - 1];
};
// 去除文件后缀
const removeSuffix = (fileName: string) => {const arr = fileName.split('.');return arr[0];
};
const startUploading = async () => {try {// 填写Object完整路径。Object完整路径中不能包含Bucket名称。// 您可以通过自定义文件名(例如exampleobject.txt)或文件完整路径(例如exampledir/exampleobject.txt)的形式实现将数据上传到当前Bucket或Bucket中的指定目录。// data对象可以自定义为file对象、Blob数据或者OSS Buffer。const suffix = getFileName(uploadFilledData.value.name); // 文件后缀const fileName = removeSuffix(uploadFilledData.value.name) + new Date().getTime() + '.' + suffix;const result = await client.value.put(fileName,uploadFilledData.value,);uploadResults.value = result;let obj = {fileName: result.name,filePath: result.url,}batch_change(obj).then(() => {window.$message.success('上传成功');init();}).catch(() => {window.$message.error('上传失败');})} catch (e) {window.$message.error('上传失败');}
};
</script>

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

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

相关文章

140 Linux 系统编程17 ,进程组,会话,创建会话,守护进程

1. 进程组&#xff0c;也称之为作业。代表一个或多个进程的集合。 每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念&#xff0c;是为了简化对多个进程的管理。 当父进程&#xff0c;创建子进程的时候&#xff0c;默认子进程…

【数据结构】顺序表+链表

目录 1.顺序表 1.1初始化顺序表 1.2销毁顺序表 1.3检查容量并扩容 1.4把某个元素插入到下标为pos的位置 1.5头插和尾插 1.6删除下标为pos的元素 1.7头删和尾删 2.顺序表的问题及思考 3.链表 3.1链表的访问 3.2链表的增删查改 1.顺序表 顺序表的本质其实就是一个数组…

Tensorflow2.0笔记 - 计算梯度

本笔记主要记录tf.GradientTape和tf.gradient的用法 import tensorflow as tf import numpy as nptf.__version__#要计算梯度的所有参数计算过程必须放到gradient tape中 #with tf.GradientTape as tape: w tf.constant(1.) x tf.constant(2.)with tf.GradientTape() as tap…

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型 IMU测量方程中的噪声模型IMU的离散时间噪声模型 IMU测量方程中的噪声模型 在大多数系统中&#xff0c;IMU的噪声由两部分组成&#xff1a;测量噪声&#xff08;Measurement Nosie&#xff09;与零偏&#xff08;Bias&#…

1.1_3 性能指标——时延、时延带宽积、往返时间RTT、利用率

文章目录 1.1_3 性能指标——时延、时延带宽积、往返时间RTT、利用率&#xff08;一&#xff09;时延&#xff08;二&#xff09;时延带宽积&#xff08;三&#xff09;往返时延RTT&#xff08;四&#xff09;利用率 1.1_3 性能指标——时延、时延带宽积、往返时间RTT、利用率 …

wireshark抓取localhost(127.0.0.1)数据包

打开wireshark中&#xff0c;在"capture"菜单中&#xff0c;选择"interfaces"子菜单&#xff0c;在列出的接口中选中"Adapter for loopback traffic capture"即可。 必须安装了Npcap才有此选项&#xff0c;否则需要重新安装wireshark。 抓包截图…

桥梁安全监测方案:多维度的技术与设备应用

一、背景与意义 随着交通基础设施的快速发展&#xff0c;桥梁作为连接两岸的关键纽带&#xff0c;其安全性能直接关系到人们的生命财产安全和交通畅通。为确保桥梁的安全与稳定&#xff0c;及时发现潜在的安全隐患&#xff0c;采取科学、有效的安全监测方案显得尤为重要。本文将…

网络 协议 UDP编程

网络:数据传输,数据共享 1.网络协议模型: OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式&#xff08;数据报、流式&#xff09…

材料物理 (HIT) 笔记-2

原内容请参考哈尔滨工业大学何飞教授&#xff1a;https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》&#xff08;哈尔滨工业大学出版社&#xff09; 三…

进程间通信之信号灯 || 网络协议UDP/TCP || 三次握手四次挥手

在线程通信中由于数据段等内存空间的共用性&#xff0c;导致同时访问时资源竞争的问题&#xff0c;在线程中我们使用信号量的申请和释放&#xff0c;在防止资源竞争的产生。在进程间的通信中&#xff0c;有信号灯的概念。搭配共享内存实现进程同步。 有名信号量: 1.创建 …

HTML标签语义化,含面试题+答案

form表单细节 一、表单 1.表单 标签用于为用户输入创建 HTML 表单 2.表单能够包含 input 元素&#xff0c;比如文本字段、复选框、单选框、提交按钮等等。 3.表单还可以包含 menus、textarea、fieldset、legend 和 label 元素。 4.表单用于向服务器传输数据。 二、表单form 的…

NASA数据集——非洲合成孔径雷达:2016 年加蓬 LVIS 导出的网格森林生物量和树冠指标

非洲合成孔径雷达:2016 年加蓬 LVIS 导出的网格森林生物量和树冠指标 简介 本数据集包含网格化森林特征产品,这些产品来自2016年NASA-ESA非洲合成孔径雷达活动期间NASA机载土地、植被和冰雪传感器(LVIS)仪器获取的非洲加蓬五个森林地点的全波形激光雷达数据。2016 年 2 月…

代码随想录算法训练营第14天| 144. 二叉树的前序遍历

144. 二叉树的前序遍历 注意事项 1、这种可能发生空指针异常的地方一定要进行非空指针判断。 2、迭代法&#xff1a;在左右节点入栈之前&#xff0c;要分别判别非空再入栈&#xff0c;否则将出错。 class Solution { public:vector<int> preorderTraversal(TreeNode…

相机类型的分辨率长宽、靶面尺寸大小、像元大小汇总

镜头的靶面尺寸大于等于相机靶面尺寸。 相机的芯片长这样&#xff0c;绿色反光部分&#xff08;我的手忽略&#xff09;&#xff1a; 基本所有像素的相机的靶面大小都可以在这个表格里面找到。 镜头的靶面尺寸在镜头外表上可以找到&#xff0c;选型很重要&#xff01;

代码还原之 函数

指令堆里逆向出来的代码有歧义&#xff0c;有三处返回&#xff0c;有嵌套IF语句&#xff0c;故推断出是个函数&#xff1b; #if 0/*27ec: 48 8d 3d 58 39 00 00 lea 0x3958(%rip),%rdi # 614b <_IO_stdin_usedBase0x14b> // rdi"COLUMNS"27f3: e8 e…

30天自制操作系统(第27天)

27.1 应用程序运行时关闭命令行窗口 需要实现的功能&#xff1a; 在应用程序运行的时候&#xff0c;可以关闭所对应的命令行窗口。思路&#xff1a;1.先调整bootpack.c中按下"x"按钮时&#xff0c;暂时将窗口隐藏起来&#xff0c;并当fifo接收从console.c发送的关闭窗…

【鸿蒙 HarmonyOS 4.0】多设备响应式布局

一、背景 在渲染页面时&#xff0c;需要根据不同屏幕大小渲染出不同的效果&#xff0c;动态的判断设备屏幕大小&#xff0c;便需要采用多设备响应式布局。这种设计方法能够动态适配各种屏幕大小&#xff0c;确保网站在不同设备上都能呈现出最佳的效果。 二、媒体查询&#xf…

第九篇:– 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

C++ primer plus 学习 4.8 new动态结构 与结构体指针

参照C primer plus 4.8.4 踩坑涉及到 1. 如何初始化结构体 2. 结构体指针使用&#xff1a;&#xff08;*pn&#xff09;->atr&#xff0c;*pn则为结构体本身 3. 指针重新赋值可能导致的内存泄漏 4.delete的使用&#xff08;只能用在new后面&#xff09; 5. 数组和字符…

【ELK日志分析系统】ELK+Filebeat分布式日志管理平台部署

ELKFilebeat部署一、ELK简介1、ELK组件1.1 其他组件 2、为什么要使用 ELK3、完整日志系统基本特征 二、ELK的工作原理三、ELK Elasticsearch 集群部署1、环境准备2、部署 Elasticsearch 软件(node节点)2.1 安装elasticsearch—rpm包2.2 修改elasticsearch主配置文件2.3 es性能调…