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-upload
    class="upload-demo"
    action="#"
    drag
    multiple
    :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();
      }
    }
  );

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成都跃享未来教育咨询有限公司,值得信赖!

在浩渺的教育咨询市场中&#xff0c;成都跃享未来教育咨询有限公司以其独特的魅力和卓越的服务质量&#xff0c;成为了行业内的璀璨明星。作为一家致力于为学生提供全方位教育咨询服务的公司&#xff0c;成都跃享未来教育咨询有限公司始终坚持安全可靠的原则&#xff0c;为广大…

【vue2新增页面跳转列表页,当前页面不会刷新问题,有效果的点个赞嗷】

文章目录 概要案例解决方法小结 概要 开发中遇到的罕有需求&#xff0c;一般来说切换路由页面就会重新渲染&#xff0c;相应接口也会自动刷新。但是有些需求新增页面是走路由的&#xff0c;关闭心中页会关闭当前面包屑&#xff0c;返回上一个&#xff0c;所以这时候由于之前列…

Proxyman 现代直观的 HTTP 调试代理应用程序

Proxyman 是一款现代而直观的 HTTP 调试代理应用程序&#xff0c;它的功能强大&#xff0c;使您可以轻松捕获、检查和操作 HTTP(s) 流量。不再让繁杂的网络调试工具阻碍您的工作&#xff0c;使用 Proxyman&#xff0c;您将轻松应对网络调试的挑战。 下载地址&#xff1a;https…

Allure在jenkins中无法显示的问题

jenkins中使用allure生成报告需要注意工作环境和路径的配置 前提条件&#xff1a; jenkins容器中已安装jdk和allure jenkins中配置全局工具环境&#xff1a; 项目中配置allure路径&#xff1a; 路径来源&#xff1a; Path需要选择相对路径的allure-report、allure-results

Mintegral解析休闲游戏如何靠创意素材吸引玩家

核心玩法简单清晰、容易让人无限上头的休闲游戏&#xff0c;玩法机制一般比较明确、简单&#xff0c;如果要在短时间内吸引玩家注意&#xff0c;除了完整展示游戏流程以外&#xff0c;开发者需要在素材中设置更多亮点性的内容&#xff0c;如吸睛的剧情、爆炸性的视听效果等元素…

033.搜索旋转排序数组

题意 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给方法之前&#xff0c;nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]&…

暴雨推出基于英特尔® 至强® 6 能效核处理服务器

随着人工智能技术的快速发展&#xff0c;大模型的应用越来越广泛。据预测&#xff0c;到2024年年底&#xff0c;我国将有5%-8%的企业大模型参数从千亿级跃升至万亿级&#xff0c;算力需求增速将达到320%&#xff0c;这进一步推动了数据中心的持续变革。 超凡性能&#xff0c;绿…

WebGIS常用技术体系记录

1、数据下载 &#xff08;1&#xff09;OSM下载开源矢量数据&#xff0c;数据较全&#xff0c;但是质量一般&#xff1b; &#xff08;2&#xff09;地理空间数据云下载DEM影像&#xff1b; &#xff08;3&#xff09;datav下载行政区 http://datav.aliyun.com/tools/atlas/…

《十八岁出门远行》世界很小,案牍劳形;世界很大,日短心长

《十八岁出门远行》世界很小&#xff0c;案牍劳形&#xff1b;世界很大&#xff0c;日短心长 余华&#xff0c;作家&#xff0c;著有《在细雨中呼喊》《活着》《文城》《兄弟》等。 文章目录 《十八岁出门远行》世界很小&#xff0c;案牍劳形&#xff1b;世界很大&#xff0c;日…

黄金票据~

一. 黄金票据原理 黄金票据一般是伪造的TGT,生成这个TGT&#xff0c;不需要和KDC进行校验&#xff0c;金票可以在本地直接生成&#xff0c;生成的的金票在非域机器和域内机器都可以使用 黄金票据的作用&#xff1a; 可以用来权限维持 可以用来横向移动二. 利用条件 1. 必须…

C++基础与深度解析 | 类与面向对象编程 | 数据成员 | 成员函数 | 访问限定符与友元 | 构造、析构成员函数 | 字面值类、成员指针与bind交互

文章目录 一、结构体与对象聚合二、成员函数&#xff08;方法&#xff09;三、访问限定符与友元1.访问限定符2.友元&#xff08;慎用&#xff09; 四、构造、析构与复制成员函数1.构造函数2.析构函数3.补充 五、字面值类&#xff0c;成员指针与bind交互1.字面值类2.成员指针3.b…

【小白专用 已验证24.6.7】C# MySQL数据库访问操作封装类

一、底层库介绍 本文主要介绍数据库访问操作类&#xff0c;包含&#xff1a;SQL插入脚本、SQL查询脚本、数据库表是否存在判断、带参脚本执行、包含事务回滚脚本执行、存储过程脚本等等。 特殊说明 在使用之前&#xff0c;先安装 MySql.Data 插件 二、底层库源码 2.1 程序源…

android antirollback verno 获取方法

ReadRollbackIndex.exe 获取 调查avbVBMeta结构体 typedef struct AvbVBMetaImageHeader { /* 0: Four bytes equal to "AVB0" (AVB_MAGIC). */ uint8_t magic[AVB_MAGIC_LEN]; /* 4: The major version of libavb required for this header. */ uint32_t…

Linux shell编程学习笔记53: nproc命令:当前进程可以使用 cpu的数量

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。对于中央处理器CPU&#xff0c;我们可以使用cat /proc/cpuinfo和 lscpu命令来收集中央处理器CPU的信息&#xff0c;如果我们只想了解和获…

一个月速刷leetcodeHOT100 day15 彻底搞懂回溯算法 以及相关题目

回溯算法采用试错的思想&#xff0c;它尝试分步的去解决一个问题。在分步解决问题的过程中&#xff0c;当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候&#xff0c;它将取消上一步甚至是上几步的计算&#xff0c;再通过其它的可能的分步解答再次尝试寻找问题的…

JavaSE 实战五子棋中国象棋(单机简易版)

介绍 JavaSE实践五子棋和中国象棋游戏&#xff0c;棋盘&#xff0c;棋子绘制&#xff0c;输赢判定重置棋盘&#xff0c;单机博弈。 五子棋棋盘 中国象棋棋盘 使用说明 启动类 Main.java&#xff0c; 面板类 Panel.java绘制棋盘和玩法&#xff0c;实体类 ChessPiecesNode.jav…

工具-金舟投屏软件: 手机如何投屏到电脑上 / Wi-Fi / USB

金舟安卓/iOS苹果投屏-正版软件下载中心 方法一、金舟投屏软件-wifi 1.1、准备工作 确保苹果手机和Windows电脑都连接到同一个Wi-Fi网络。 在Windows电脑上安装并打开金舟投屏软件。 1.2、操作步骤 在金舟投屏软件上选择“苹果手机投屏”功能。 在苹果手机上下滑屏幕&am…

动手学深度学习29 残差网络ResNet

动手学深度学习29 残差网络ResNet ResNet代码ReLU的两种调用1. 使用 torch.nn.ReLU 模块2. 使用 torch.nn.functional.relu 函数总结 QA29.2 ResNet 为什么能训练处1000层的模型ResNet的梯度计算怎么处理梯度消失的 QA ResNet 更复杂模型包含小模型&#xff0c;不一定改进&…

公司刚来的00后真卷,上班还没2年,跳到我们公司起薪20k。。。

前言 现在都说要躺平了&#xff0c;但该说不说的&#xff0c;一样都在卷&#xff0c;你信了就输了。 前段时间我们公司来了个卷王&#xff0c;工作2年左右吧&#xff0c;跳槽到我们公司起薪20K&#xff0c;真的比我还牛。后来才知道人家是真的卷啊&#xff01;都不当人了&…

初识C++ · 模板进阶

目录 前言&#xff1a; 1 非类型模板参数 2 按需实例化 3 模板特化 4 模板的分离编译 前言&#xff1a; 前面模板我们会了简单的使用&#xff0c;这里带来模板的进阶&#xff0c;当然&#xff0c;也就那么几个知识点&#xff0c;并不太难。 1 非类型模板参数 先来看这样…