Skip to content
html上传图片至腾讯云文件存储

文档:https://cloud.tencent.com/document/product/436/64960

html
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <title>COS 直传 demo</title>
    <meta name="referrer" content="no-referrer">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <!-- 1. 官方 SDK -->
    <script src="https://cdn.statically.io/npm/cos-js-sdk-v5/dist/cos-js-sdk-v5.min.js"></script>
    <style>
        body {
            font-family: PingFang SC, Helvetica;
            margin: 0;
            padding: 1rem;
            background: #f5f5f5
        }

        .box {
            background: #fff;
            padding: .8rem;
            border-radius: .3rem;
            text-align: center
        }

        img {
            max-width: 100%;
            margin-top: .8rem;
            border-radius: .3rem
        }

        button {
            background: #0066ff;
            color: #fff;
            border: none;
            padding: .5rem 1.2rem;
            border-radius: .3rem;
            font-size: .9rem
        }

        .url {
            color: #0066ff;
            word-break: break-all;
            margin-top: .5rem
        }
    </style>
</head>

<body>
    <div class="box">
        <h3>腾讯云 COS 直传示例</h3>
        <button id="btn">选择图片并上传</button>
        <div id="result"></div>
    </div>

    <script>
        /* =========  配置区 – 改成你自己的 ========= */
        const CONFIG = {
            Bucket: '', // 存储桶,必须字段
            Region: '', // 存储桶所在地域,必须字段
            TmpSecretId: '', // 密钥的 SecretId,必须字段
            TmpSecretKey: '', // 密钥的 SecretKey,必须字段
            Dir: '', // 上传目录,如 h5/
            Token: '', // 临时密钥的 Token,必须字段
            StartTime: 1758676512, // 建议传入服务端开始时间,可避免客户端时间不准导致的签名错误
            ExpiredTime: 1758762912, // 临时密钥过期时间
        };
        /* ======================================== */

        // 初始化 COS
        const cos = new COS({ SecretId: CONFIG.TmpSecretId, SecretKey: CONFIG.TmpSecretKey, SecurityToken: CONFIG.Token, StartTime: CONFIG.StartTime, ExpiredTime: CONFIG.ExpiredTime });

        // 工具:生成唯一文件名
        const genKey = name => CONFIG.Dir + Date.now() + '-' + Math.random().toString(36).slice(2) + '.' + name.split('.').pop();

        // 上传函数
        function upload(file) {
            console.log('开始上传:', genKey(file.name));
            const Key = genKey(file.name);
            cos.uploadFile({
                Bucket: CONFIG.Bucket,
                Region: CONFIG.Region,
                Key,
                Body: file,
                onProgress: p => console.log('进度:' + (p.percent * 100).toFixed(0) + '%')
            }, (err, data) => {

                if (err) {
                    console.log('err', err);
                    return alert('上传失败:' + err.message);
                }
                console.log('上传成功,返回数据为:', data);
                const url = 'https://' + data.Location;
                document.getElementById('result').innerHTML =
                    `<p>上传成功!</p><img src="${url}" /><p class="url">${url}</p>`;
            });
        }

        // 点击按钮
        document.getElementById('btn').onclick = () => {
            const ipt = document.createElement('input');
            ipt.type = 'file'; ipt.accept = 'image/*'; ipt.onchange = ({ target }) => target.files[0] && upload(target.files[0]);
            ipt.click();
        };
    </script>
</body>

</html>