腾讯云对象存储COS的JS上传封装


官网:https://cloud.tencent.com/document/product/436/11459

参考:https://blog.csdn.net/qq_40146880/article/details/102829629

一、下载SDK并引入

  地址:https://cos-sdk-archive-1253960454.file.myqcloud.com/cos-js-sdk-v5/latest/cos-js-sdk-v5.zip?_ga=1.114550148.286138921.1586252253

  (可前往上面官网下载)

<script src="./sdk/cos-js-sdk-v5.min.js"></script>

 

二、封装上传,cos.js

export default new (class { constructor() {} _cos(obj) { return new COS({ getAuthorization: function(options, callback) { callback({ TmpSecretId: obj.credentials.tmpSecretId, TmpSecretKey: obj.credentials.tmpSecretKey, XCosSecurityToken: obj.credentials.sessionToken, StartTime: obj.startTime, // 时间戳,单位秒,如:1580000000
                    ExpiredTime: obj.expiredTime, // 时间戳,单位秒,如:1580000000,SDK 在 ExpiredTime 时间前,不会再次调用 getAuthorization
 }); } }); } /** * 文件直传 * @param {Object} obj Bucket、Region...,接口返回 * @returns err || data */ putObject(obj,file,callback) { return new Promise((resolve, reject) => { this._cos(obj).putObject( { Bucket: obj.bucket, /* 必须 */ Region: obj.region, /* 存储桶所在地域,必须字段 */ Key: obj.prefix + `${this.randomSign(3)}.${file.name.split('.')[1]}`,      /* 必须 */ Body: file, // 上传文件对象
 }, (err, data) => { callback(err,data) } ); }); } /** * 文件分块上传 * @param {Object} obj Bucket、Region...,接口返回 * @returns err || data */ sliceUploadFile(obj,file,callback) { return new Promise((resolve, reject) => { this._cos(obj).sliceUploadFile( { Bucket: obj.bucket, Region: obj.region, Key: obj.prefix + `${this.randomSign(3)}.${file.name.split('.')[1]}`, Body: file, onTaskReady: function(taskId) { /* 执行队列taskId */ console.log('taskId:', taskId); }, onProgress: progressData => { /* 非必须 */
                        var percent = parseInt(progressData.percent * 10000) / 100; var speed = parseInt((progressData.speed / 1024 / 1024) * 100) / 100; console.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;'); this.loading('进度:' + parseInt(percent) + '%'); } }, (err, data) => { callback(err,data) } ); }); } randomSign(len) { return `${this.random_string(len)}-${parseInt(Math.floor(Math.random() * Date.now()) / 1000)}`; } random_string(len) { //获取随机名
        len = len || 32; let chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; let maxPos = chars.length; let pwd = ''; for (let i = 0; i < len; i++) { pwd += chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } loading(text) { try { console.log(text); } catch (error) { console.log(error); } } })();

 

三、使用

<!--vue-->
<input @change="handleChange" accept="image/*" type="file" name="" id="" />
import cos from '@/utils/cos'
// 请求数据
$.get('http://xxxxxxx', null, function (res) { // res:{
    // code: 1,
    // data: {
    // bucket: "dev....51007710",
    // credentials: 
    // {
    // sessionToken: "GXpM....7N5Asg",
    // tmpSecretId: "AKIDF....jB3mQ2",
    // tmpSecretKey: "pnof....9qew8="
    // },
    // domain: "dev....myqcloud.com",
    // expiration: "2020-12-24T06:46:10Z",
    // expiredTime: 1608792370,
    // prefix: "post/..../u/1/",
    // region: "ap-chengdu",
    // requestId: "cbc6....e080",
    // startTime: 1608788770
    // },
    // msg: ""
    // }
    if (res.code == 1 && res.data) { cos._cos(res.data) } else{ // error
 } });
// 上传
handleChange(e) { // 这里的this.tx_data为上一步请求接口拿到的数据
    var _this = this
    if(this.tx_data){ cos.putObject(this.tx_data,e.target.files[0],(error,data)=>{ if(error){ this.$message.error('上传失败') }else{ this.$message.success('上传成功') let url = 'https://'+ data.Location // ...
 } }) }else{ // error
 } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM