Browser.js初始化
Client是OSS Browser.js的客戶端,用于管理存儲空間和文件等OSS資源。使用Browser.js SDK發(fā)起OSS請求時,您需要初始化一個Client實例,并根據(jù)需要修改默認配置項。
前提條件
已安裝Browser.js SDK。具體操作,請參見安裝。
新建Client
V4簽名(推薦)
推薦使用更安全的V4簽名算法。使用V4簽名初始化時,需要聲明authorizationV4。OSS Browser.js SDK 6.20.0及以上版本支持V4簽名。
以使用OSS域名初始化時使用V4簽名為例,其他通過自定義域名等初始化的場景可參考以下示例執(zhí)行相應(yīng)修改。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<!--導(dǎo)入SDK文件-->
<script
type="text/javascript"
src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.20.0.min.js"
></script>
<script type="text/javascript">
const client = new OSS({
// yourRegion填寫B(tài)ucket所在地域。以華東1(杭州)為例,yourRegion填寫為oss-cn-hangzhou。
region: 'yourRegion',
authorizationV4: true,
// 從STS服務(wù)獲取的臨時訪問密鑰(AccessKey ID和AccessKey Secret)。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// 從STS服務(wù)獲取的安全令牌(SecurityToken)。
stsToken: 'yourSecurityToken',
// 填寫B(tài)ucket名稱,例如examplebucket。
bucket: "examplebucket",
});
</script>
</body>
</html>
V1簽名(不推薦)
阿里云對象存儲OSS自2025年03月01日起不再對新用戶(即新UID )開放使用V1簽名,并將于2025年09月01日起停止更新與維護且不再對新增Bucket開放使用V1簽名。請盡快切換到V4簽名,避免影響服務(wù)。更多信息,請參見公告說明。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<!--導(dǎo)入SDK文件-->
<script
type="text/javascript"
src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"
></script>
<script type="text/javascript">
const client = new OSS({
// yourRegion填寫B(tài)ucket所在地域。以華東1(杭州)為例,yourRegion填寫為oss-cn-hangzhou。
region: 'yourRegion',
// 從STS服務(wù)獲取的臨時訪問密鑰(AccessKey ID和AccessKey Secret)。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// 從STS服務(wù)獲取的安全令牌(SecurityToken)。
stsToken: 'yourSecurityToken',
// 填寫B(tài)ucket名稱,例如examplebucket。
bucket: "examplebucket",
});
</script>
</body>
</html>
配置Client
您可以在初始化Client時按需添加配置項,例如通過timeout
指定請求超時時間,通過stsToken
指定臨時訪問憑證等。關(guān)于Browser.js支持的配置項以及配置示例,具體參數(shù)請參考下方說明。
options參數(shù)說明:
accessKeyId {String}:在阿里云控制臺網(wǎng)站上創(chuàng)建的訪問密鑰。
accessKeySecret {String}:在阿里云控制臺創(chuàng)建的訪問密鑰秘密。
[stsToken] {String}:用于臨時授權(quán)。
[refreshSTSToken] {Function}:當(dāng)STS信息過期時自動設(shè)置stsToken、accessKeyId、accessKeySecret的函數(shù)。返回值必須是包含stsToken、accessKeyId、accessKeySecret的對象。
[refreshSTSTokenInterval] {number}:STS令牌刷新間隔時間(毫秒)。應(yīng)小于STS信息的過期間隔,默認為300000毫秒(5分鐘)。
[bucket] {String}:您想訪問的默認Bucket。如果沒有Bucket,請先使用putBucket()創(chuàng)建一個。
[endpoint] {String}:OSS區(qū)域域名。優(yōu)先級高于region。根據(jù)需要設(shè)置為外網(wǎng)域名、內(nèi)網(wǎng)域名或加速域名等,請參考終端節(jié)點列表。
[region] {String}:Bucket數(shù)據(jù)所在的區(qū)域位置,默認為oss-cn-hangzhou。
[internal] {Boolean}:是否通過阿里云內(nèi)網(wǎng)訪問OSS,默認為false。如果您的服務(wù)器也在阿里云上運行,可以設(shè)置為true以節(jié)省大量費用。
[secure] {Boolean}:指示OSS客戶端使用HTTPS(secure: true)還是HTTP(secure: false)協(xié)議。
[timeout] {String|Number}:針對所有操作的實例級別超時時間,默認為60秒。
[cname] {Boolean}:默認為false,使用自定義域名訪問OSS。如果為true,則可以在endpoint字段中填寫自定義域名。
[isRequestPay] {Boolean}:默認為false,表示是否開啟Bucket的請求者支付功能,如果為true,會向OSS服務(wù)器發(fā)送頭部'x-oss-request-payer': 'requester'。
[useFetch] {Boolean}:默認為false,僅在瀏覽器環(huán)境中生效。如果為true,意味著使用fetch模式上傳對象,否則使用XMLHttpRequest。
[enableProxy] {Boolean}:啟用代理請求,默認為false。注意啟用代理請求時,請確保已安裝proxy-agent。
[proxy] {String | Object}:代理URI或選項,默認為null。
[retryMax] {Number}:當(dāng)請求因網(wǎng)絡(luò)錯誤或超時出錯時自動重試發(fā)送請求的最大次數(shù)。不支持流式上傳(如put、putStream、append等),因為流只能被消費一次。
[maxSockets] {Number}:每個主機允許的最大套接字數(shù)。默認為無限。
[authorizationV4] {Boolean}:使用V4簽名。默認為false。
示例
基本用法
const OSS = require('ali-oss');
const store = new OSS({
region: 'yourRegion',
authorizationV4: true,
accessKeyId: 'your access key',
accessKeySecret: 'your access secret',
stsToken: 'yourSecurityToken',
bucket: 'your bucket name',
});
使用加速訪問endpoint:
全球加速訪問endpoint:oss-accelerate.aliyuncs.com
中國內(nèi)地以外區(qū)域的加速訪問endpoint:oss-accelerate-overseas.aliyuncs.com
const OSS = require('ali-oss');
const store = new OSS({
region: 'yourRegion',
authorizationV4: true,
accessKeyId: 'your access key',
accessKeySecret: 'your access secret',
stsToken: 'yourSecurityToken',
bucket: 'your bucket name',
endpoint: 'oss-accelerate.aliyuncs.com',
});
使用自定義訪問方式
const OSS = require('ali-oss');
const store = new OSS({
region: 'yourRegion',
authorizationV4: true,
stsToken: 'yourSecurityToken',
accessKeyId: 'your access key',
accessKeySecret: 'your access secret',
cname: true,
endpoint: 'your custome domain',
});
使用STS Token訪問
const OSS = require('ali-oss');
const store = new OSS({
region: 'yourRegion',
authorizationV4: true,
accessKeyId: 'your STS key',
accessKeySecret: 'your STS secret',
stsToken: 'your STS token',
refreshSTSToken: async () => {
const info = await fetch('you sts server');
return {
accessKeyId: info.accessKeyId,
accessKeySecret: info.accessKeySecret,
stsToken: info.stsToken,
};
},
refreshSTSTokenInterval: 300000,
});
使用流重新嘗試請求
for (let i = 0; i <= store.options.retryMax; i++) {
try {
const result = await store.putStream('<example-object>', fs.createReadStream('<example-path>'));
console.log(result);
break; // break if success
} catch (e) {
console.log(e);
}
}
使用V4簽名,并使用可選的additionalHeaders選項(類型為字符串?dāng)?shù)組),其中的值需要包含在標頭中。
const OSS = require('ali-oss');
const store = new OSS({
accessKeyId: 'your access key',
accessKeySecret: 'your access secret',
bucket: 'your bucket name',
region: 'oss-cn-hangzhou',
authorizationV4: true ,
stsToken: 'yourSecurityToken',
});
try {
const bucketInfo = await store.getBucketInfo('your bucket name');
console.log(bucketInfo);
} catch (e) {
console.log(e);
}
try {
const putObjectResult = await store.put('your bucket name', 'your object name', {
headers: {
// The headers of this request
header1: 'value1',
header2: 'value2',
},
// The keys of the request headers that need to be calculated into the V4 signature. Please ensure that these additional headers are included in the request headers.
additionalHeaders: ['additional header1', 'additional header2'],
});
console.log(putObjectResult);
} catch (e) {
console.log(e);
}