本文介紹如何在開啟版本控制狀態下列舉儲存空間下(Bucket)的所有檔案(Object)、指定個數的檔案、指定首碼的檔案等。
列舉Bucket中所有Object的資訊
以下代碼用於列舉指定Bucket中包括刪除標記(Delete Marker)在內的所有Object的版本資訊:
const OSS = require("ali-oss");
const client = new OSS({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫儲存空間名稱。
bucket: 'yourbucketname'
});
// 列舉包括刪除標記在內的所有Object的版本資訊。
async function getObjectVersions() {
let nextKeyMarker = null;
let nextVersionMarker = null;
let versionListing = null;
do {
versionListing = await client.getBucketVersions({
keyMarker: nextKeyMarker,
versionIdMarker: nextVersionMarker,
});
versionListing.objects.forEach((o) => {
console.log(`${o.name}, ${o.versionId}`);
});
versionListing.deleteMarker.forEach((o) => {
console.log(`${o.name}, ${o.versionId}`);
});
nextKeyMarker = versionListing.NextKeyMarker;
nextVersionMarker = versionListing.NextVersionIdMarker;
} while (versionListing.isTruncated);
}
getObjectVersions();
列舉指定首碼Object的版本資訊
以下代碼用於列舉指定首碼Object的版本資訊:
const OSS = require("ali-oss");
const client = new OSS({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫儲存空間名稱。
bucket: 'yourbucketname'
});
// 指定列舉以"test-"為首碼的Object的版本資訊。
async function getObjectVersionsByPrefix() {
let nextKeyMarker = null;
let nextVersionMarker = null;
let versionListing = null;
const prefix = 'test-'
do {
versionListing = await client.getBucketVersions({
keyMarker: nextKeyMarker,
versionIdMarker: nextVersionMarker,
prefix
})
versionListing.objects.forEach(o => {
console.log(`${o.name}, ${o.versionId}`)
})
versionListing.deleteMarker.forEach(o => {
console.log(`${o.name}, ${o.versionId}`)
})
nextKeyMarker = versionListing.NextKeyMarker;
nextVersionMarker = versionListing.NextVersionIdMarker;
} while (versionListing.isTruncated);
}
getObjectVersionsByPrefix();
列舉指定個數Object的版本資訊
以下代碼用於列舉指定個數Object的版本資訊:
const OSS = require("ali-oss");
const client = new OSS({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫儲存空間名稱。
bucket: 'yourbucketname'
});
async function getObjectVersionByNumber() {
// 指定最多列舉100個Object的版本資訊。
const versionListing = await client.getBucketVersions({
"max-keys": 100,
});
// 擷取Object的版本資訊。在未開啟版本控制的情況下,VersionId為none。
versionListing.objects.forEach((o) => {
console.log(`${o.name}, ${o.versionId}`);
});
versionListing.deleteMarker.forEach((o) => {
console.log(`${o.name}, ${o.versionId}`);
});
}
getObjectVersionByNumber();
檔案夾功能
OSS沒有檔案夾的概念,所有元素都是以檔案來儲存。建立檔案夾本質上來說是建立了一個大小為0並以正斜線(/)結尾的檔案。這個檔案可以被上傳和下載,控制台會對以正斜線(/)結尾的檔案以檔案夾的方式展示。
通過delimiter和prefix兩個參數可以類比檔案夾功能:
如果設定prefix為某個檔案夾名稱,則會列舉以此prefix開頭的檔案,即該檔案夾下所有的檔案和子檔案夾(目錄)均顯示為Object。
如果在設定了prefix的情況下,將delimiter設定為正斜線(/),則只列舉該檔案夾下的檔案和子檔案夾(目錄),該檔案夾下的子檔案夾(目錄)顯示為CommonPrefixes,子檔案夾下的檔案和檔案夾不顯示。
假設儲存空間中包含oss.jpg、fun/test.jpg、fun/movie/001.avi和fun/movie/007.avi4個檔案,正斜線(/)作為檔案夾的分隔字元。以下樣本說明了如何通過類比檔案夾的方式列舉檔案。
列舉根目錄下的Object的版本資訊
以下代碼用於列舉根目錄下的Object的版本資訊:
const OSS = require("ali-oss");
const client = new OSS({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫儲存空間名稱。
bucket: 'yourbucketname'
});
// 指定delimiter參數為正斜線(/),將會列舉根目錄下的Object的版本資訊以及檔案夾名稱。
async function getRootObjectVersions() {
let nextKeyMarker = null;
let nextVersionMarker = null;
let versionListing = null;
do {
versionListing = await client.getBucketVersions({
keyMarker: nextKeyMarker,
versionIdMarker: nextVersionMarker,
delimiter: "/",
});
nextKeyMarker = versionListing.NextKeyMarker;
nextVersionMarker = versionListing.NextVersionIdMarker;
console.log(versionListing);
} while (versionListing.isTruncated);
}
getRootObjectVersions();
列舉目錄下的檔案和子目錄
以下代碼用於列舉指定目錄下的檔案和子目錄:
const OSS = require("ali-oss");
const client = new OSS({
// yourregion填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫儲存空間名稱。
bucket: 'yourbucketname'
});
// 設定prefix參數來擷取fun目錄下的所有檔案與檔案夾,同時設定delimiter參數為正斜線(/)作為檔案夾的分隔字元。
async function getObjectVersionsByPrefixAndDirectory() {
let nextKeyMarker = null;
let nextVersionMarker = null;
let versionListing = null;
let prefix = "foo/";
do {
versionListing = await client.getBucketVersions({
keyMarker: nextKeyMarker,
versionIdMarker: nextVersionMarker,
prefix,
delimiter: "/",
});
nextKeyMarker = versionListing.NextKeyMarker;
nextVersionMarker = versionListing.NextVersionIdMarker;
console.log(versionListing);
} while (versionListing.isTruncated);
}
getObjectVersionsByPrefixAndDirectory();
相關文檔
關於列舉檔案的API介面說明,請參見ListObjectVersions(GetBucketVersions)。