• 腾讯云对象存储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
        }
    }
  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/jing-zhe/p/14183745.html
Copyright © 2020-2023  润新知