Vue3_对接腾讯云COS_大文件分片上传和下载

2024-06-07 21:36

本文主要是介绍Vue3_对接腾讯云COS_大文件分片上传和下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

 一、腾讯云后台配置

二、安装SDK

1.script 引入方式

2.webpack 引入方式

三、文件上传

1.new COS 实例

2.上传文件

四、文件下载


腾讯云官方文档:

腾讯云官方文档icon-default.png?t=N7T8https://cloud.tencent.com/document/product/436/11459

 一、腾讯云后台配置

1.登录 对象存储控制台 ,创建存储桶。获取存储桶名称和 地域名称。

2. 登录 访问管理控制台 ,获取您的项目 SecretId 和 SecretKey。

3. 配置 CORS 规则,AllowHeader 需配成*,ExposeHeaders 需要 ETag、Content-Length 以及其他 js 需要读取的 header 字段,如下图所示。操作详情请参见 设置跨域访问 文档。

二、安装SDK

1.script 引入方式

<!--src为本地路径 根据自己项目目录结构来调整-->
<script src="../dist/cos-js-sdk-v5.min.js"></script>

2.webpack 引入方式

安装:

npm i cos-js-sdk-v5 --save

引入:

// node引入方式
const COS = require('cos-js-sdk-v5');// js引入方式
import COS from 'cos-js-sdk-v5';

三、文件上传

本案例用npm方式安装SDK,使用js方式引入。文件上传使用的是,高级上传,高级上传接口 uploadFile,自动针对小文件使用简单上传,大文件使用分块上传,性能更好。

腾讯云文件高级上传参数icon-default.png?t=N7T8https://cloud.tencent.com/document/product/436/64960#.E9.AB.98.E7.BA.A7.E4.B8.8A.E4.BC.A0

1.new COS 实例

import COS from "cos-js-sdk-v5";const cos = new COS({// getAuthorization 必选参数getAuthorization: function (options, callback) {callback({TmpSecretId: "在控制台查看",TmpSecretKey: "在控制台查看",SecurityToken: "临时密钥_后端返回来的",ExpiredTime: "临时密钥到期时间_后端返回来的", // 时间戳,单位秒,如:1580000000});},
});

后端获得临时密钥的步骤:

后端获得临时密钥并返给前端icon-default.png?t=N7T8https://cloud.tencent.com/document/product/436/14048

2.上传文件

文件上传,我们用的高级上传接口,自动识别,小文件(低于你设置的数据)直接上传,大文件分片上传。

<template><!-- 上传组件用的el-upload --><el-uploadclass="upload-demo"action="#"dragmultiple:auto-upload="false":show-file-list="true"v-model:file-list="fileList":on-change="(file, fileList) => {handleChange(file, fileList);}":on-remove="handleRemove"><el-icon class="el-icon--upload"><upload-filled /></el-icon><div class="el-upload__text">拖拽文件到这里或者<em>点击上传</em></div></el-upload>
</template><script setup>import COS from "cos-js-sdk-v5";
import { computed, reactive } from "vue";//从后端获得临时密钥的请求接口,换成你自己的
import { reqCloudInfo } from "@/api";const state = reactive({result: "",
});//从后端获得请求临时密钥,换成你自己的
const getData = async () => {let result = await reqCloudInfo();if (result != undefined) {if (result.error_code == 0) {state.result = result;} else {console.log(result);}}
};
getData ();// new 一个COS实例
const cos = new COS({getAuthorization: function (options, callback) {//credentials ,按照你的后端返回来的数据自行赋值let credentials = state.result.datas_info.Credentials;callback({TmpSecretId: credentials.TmpSecretId,TmpSecretKey: credentials.TmpSecretKey,SecurityToken: credentials.Token,ExpiredTime: state.result.datas_info.ExpiredTime, // 时间戳,单位秒,如:1580000000});},
});// 文件上传 选择文件时触发(:on-change事件)
const handleChange = (uploadFile, uploadFiles) => {//cosData ,根据你后端返回的数据自行赋值let cosData = state.result.datas_info;cos.uploadFile({Bucket: cosData.Bucket /* 填入您自己的存储桶,必须字段 */,Region: cosData.Region /* 存储桶所在地域,例如ap-beijing,必须字段 */,Key:cosData.Key +"/1.jpg" /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */,Body:uploadFile.raw /* 必须,上传文件对象,可以是input[type="file"]标签选择本地文件后得到的file对象 */,SliceSize: 1024 * 1024 * 5 /* 触发分块上传的阈值,超过5MB使用分块上传,非必须 */,onTaskReady: function (taskId) {/* 非必须 */console.log(taskId);},onProgress: function (progressData) {/* 非必须 */console.log(JSON.stringify(progressData));},onFileFinish: function (err, data, options) {/* 非必须 */console.log(options.Key + "上传" + (err ? "失败" : "完成"));},},function (err, data) {console.log(err || data);});
};</script><style scoped></style>

如果报错403:

报错403解决办法icon-default.png?t=N7T8https://cloud.tencent.com/document/product/436/54303#message-.E4.B8.BA-.E2.80.9Caccess-denied..E2.80.9D

如果报了“Access Denied.”,就是后端临时密钥权限不对,让他添加相应字段即可。上传文件的,分片上传的,文件读取下载的。

四、文件下载

下载文件到本地:

import COS from "cos-js-sdk-v5";const cos = new COS({// getAuthorization 必选参数getAuthorization: function (options, callback) {callback({TmpSecretId: "在控制台查看",TmpSecretKey: "在控制台查看",SecurityToken: "临时密钥_后端返回来的",ExpiredTime: "临时密钥到期时间_后端返回来的", // 时间戳,单位秒,如:1580000000});},
});//文件下载
cos.getObject({Bucket:  /* 填入您自己的存储桶,从后端返回的数据获取*/,Region:  /* 存储桶所在地域,例如ap-beijing*/,Key:  /*你的key*/,DataType: "blob",onProgress: function (progressData) {},},function (err, data) {if (data.Body) {//通过浏览器下载const myBlob = new window.Blob([data.Body], { type: data.Body.type });let name = "文件名字通过cosData.Key获取";const qrUrl = window.URL.createObjectURL(myBlob);var fileLink = document.createElement("a");fileLink.href = qrUrl;fileLink.setAttribute("download", name);document.body.appendChild(fileLink);fileLink.click();}});

这篇关于Vue3_对接腾讯云COS_大文件分片上传和下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("