对象访问 URL

最近更新时间:2024-06-03 16:57:42

我的收藏

简介

本文档提供获取已上传到存储的对象访问 URL 的代码示例。

获取对象访问 URL

功能说明

查询对象访问的 URL,该接口不会判断对象是否真实存在。
说明:
如何使生成的对象 URL 在浏览器中打开是预览,而不是下载:在获取的 url 后拼接参数 response-content-disposition=inline。
如何使生成的对象 URL 在浏览器中打开是下载,而不是预览:在获取的 url 后拼接参数 response-content-disposition=attachment。
下载时如何重命名文件:在获取的 URL 后拼接参数 filename,例如 response-content-disposition=attachment;filename=自定义文件名。
若使用临时密钥生成预签名 URL,请确保申请临时密钥的 action 添加了 "name/cos:GetObject" 权限。

使用示例

获取在浏览器默认下载的 url:
// SECRETID 和 SECRETKEY 请登录 https://console.cloud.tencent.com/cam/capi 进行查看和管理
const COS = require('cos-nodejs-sdk-v5');
const cos = new COS({
SecretId: process.env.SecretId, // 推荐使用环境变量获取;用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
SecretKey: process.env.SecretKey, // 推荐使用环境变量获取;用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
});
const cosUrl = cos.getObjectUrl({
Bucket: 'examplebucket-1250000000', // 填入您自己的存储桶,必须字段
Region: 'COS_REGION', // 存储桶所在地域,例如 ap-beijing,必须字段
Key: '头像.jpg', // 存储在桶里的对象键(例如1.jpg,a/b/test.txt),支持中文,必须字段
Sign: true, // 获取带签名的对象 URL
});
/* 复制 downloadUrl 的值到浏览器打开会自动触发下载 */
const downloadUrl =
cosUrl +
(cosUrl.indexOf('?') > -1 ? '&' : '?') +
'response-content-disposition=attachment;filename=图片.jpg'; // 补充强制下载的参数并重命名下载后的文件
说明:
如果签名过程是异步获取,例如通过 getAuthorization 获取临时密钥/签名做初始化时,需要通过 callback 获取带签名 Url。
// 初始化实例
const cos = new COS({
// getAuthorization 必选参数
getAuthorization: function (options, callback) {
// 初始化时不会调用,只有调用 cos 方法(例如 cos.putObject)时才会进入
// 异步获取临时密钥
// 服务端 JS 和 PHP 例子:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/
// 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk
// STS 详细文档指引看:https://cloud.tencent.com/document/product/436/14048

const url = 'http://example.com/server/sts.php'; // url 替换成您自己的后端服务
const xhr = new XMLHttpRequest();
let data = null;
let credentials = null;
xhr.open('GET', url, true);
xhr.onload = function (e) {
try {
data = JSON.parse(e.target.responseText);
credentials = data.credentials;
} catch (e) {
}
if (!data || !credentials) {
return console.error('credentials invalid:\\n' + JSON.stringify(data, null, 2))
};
callback({
TmpSecretId: credentials.tmpSecretId,
TmpSecretKey: credentials.tmpSecretKey,
SecurityToken: credentials.sessionToken,
// 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
StartTime: data.startTime, // 时间戳,单位秒,如:1580000000
ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000000
});
};
xhr.send();
}
});

cos.getObjectUrl(
{
Bucket: 'examplebucket-1250000000', // 填入您自己的存储桶,必须字段
Region: 'COS_REGION', // 存储桶所在地域,例如 ap-beijing,必须字段
Key: '头像.jpg', // 存储在桶里的对象键(例如1.jpg,a/b/test.txt),支持中文,必须字段
Sign: true, // 获取带签名的对象 URL
},
function (err, data) {
if (err) return console.log(err);
/* url为对象访问 url */
var url = data.Url;
/* 复制 downloadUrl 的值到浏览器打开会自动触发下载 */
var downloadUrl =
data.Url +
(data.Url.indexOf('?') > -1 ? '&' : '?') +
'response-content-disposition=attachment;filename=图片.jpg'; // 补充强制下载的参数并重命名下载后的文件
}
);

参数说明

参数名
参数描述
类型
是否必填
Bucket
存储桶的名称,命名规则为 BucketName-APPID,此处填写的存储桶名称必须为此格式
String
Region
存储桶所在地域,枚举值请参见 地域和访问域名
String
Key
对象键(Object 的名称),对象在存储桶中的唯一标识,详情请参见 对象概述
String
Sign
是否返回带有签名的 Url,默认为 true,当对象为私有读时,获取到不带签名的 url 依然没有权限访问
Boolean
Protocol
可选填为 http:https:,默认为 http:(带冒号)
String
Domain
存储桶访问域名,默认为 {BucketName-APPID}.cos.{Region}.myqcloud.com
String
Method
操作方法,例如 GET,POST,DELETE,HEAD 等 HTTP 方法,默认为 GET
String
Query
签名中要签入的请求参数,{key: 'val'} 的格式
Object
Headers
签名中要签入的请求头部,{key: 'val'} 的格式
Object
Expires
签名几秒后失效,默认为 900 秒
Number

回调函数说明

function(err, data) { ... }
参数名
参数描述
类型
err
请求发生错误时返回的对象,包括网络错误和业务错误。如果请求成功则为空,详情请参见 错误码 文档
Object
data
请求成功时返回的对象,如果请求发生错误,则为空
Object
- Url
计算得到的 Url
String