Cette rubrique explique comment répertorier tous les fichiers (objets) d’un compartiment spécifié, ainsi que les fichiers et sous-répertoires d’un répertoire donné.
Notes d'utilisation
Si vous utilisez des outils d'empaquetage tels que Webpack et Browserify, installez le SDK OSS pour Browser.js en exécutant la commande npm install ali-oss.
Si aucune règle CORS n’est configurée pour le compartiment, le navigateur rejettera toute tentative d’accès depuis un navigateur. Vous devez donc configurer des règles CORS pour autoriser cet accès. Pour plus d’informations, consultez Installation.
-
Le SDK OSS pour Browser.js s’exécute principalement dans un navigateur. Pour éviter d’exposer votre paire de clés AccessKey, nous vous recommandons d’utiliser des identifiants temporaires obtenus via le Security Token Service (STS) pour accéder à OSS.
Ces identifiants temporaires comprennent une paire de clés AccessKey et un jeton de sécurité. La paire de clés se compose d’un AccessKey ID et d’un AccessKey Secret. Pour savoir comment obtenir ces identifiants, consultez Utiliser STS pour une autorisation d'accès temporaire.
Répertorier tous les fichiers d'un compartiment
Utilisez la fonction list pour répertorier tous les fichiers du compartiment actuel :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
</head>
<body>
<script>
const client = new OSS({
// Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set yourRegion to oss-cn-hangzhou.
region: "yourRegion",
authorizationV4: true,
// The temporary AccessKey pair (AccessKey ID and AccessKey secret) obtained from Security Token Service (STS).
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// The security token (SecurityToken) obtained from STS.
stsToken: 'yourSecurityToken',
// Specify the bucket name. For example, examplebucket.
bucket: "examplebucket",
});
async function list(dir) {
try {
// By default, a maximum of 1,000 files are returned.
let result = await client.list();
console.log(result);
// Continue to obtain the file list starting from the file that follows the last file read in the previous list operation.
if (result.isTruncated) {
result = await client.list({ marker: result.nextMarker });
}
// List files that have the prefix 'ex'.
result = await client.list({
prefix: "ex",
});
console.log(result);
// List files that have the prefix 'ex' and whose names come after 'example' in alphabetical order.
result = await client.list({
prefix: "ex",
marker: "example",
});
console.log(result);
} catch (e) {
console.log(e);
}
}
list();
</script>
</body>
</html>
Répertorier les fichiers et sous-répertoires d'un répertoire spécifique
OSS ne repose pas sur le concept de répertoires : tous les éléments sont stockés sous forme d’objets. Pour simuler un répertoire, créez un objet de 0 Ko dont le nom se termine par une barre oblique (/). Cet objet peut être téléchargé et téléversé. La console OSS affiche comme des répertoires les objets dont le nom se termine par une barre oblique (/). Utilisez les paramètres Delimiter et Prefix pour simuler le fonctionnement des répertoires :
Si vous définissez Prefix avec le nom d’un répertoire, vous obtenez la liste de tous les fichiers commençant par ce préfixe. Cette opération liste de manière récursive tous les fichiers et sous-répertoires contenus dans ce répertoire.
Si vous définissez également Delimiter avec une barre oblique (/), la réponse ne contient que les fichiers et sous-répertoires situés directement dans ce répertoire. Les noms des sous-répertoires apparaissent dans la section SubDir. Les fichiers et dossiers imbriqués dans ces sous-répertoires ne sont pas listés.
Supposons qu’un compartiment contienne les fichiers suivants :
foo/x
foo/y
foo/bar/a
foo/bar/b
foo/hello/C/1
foo/hello/C/2
...
foo/hello/C/9999
Utilisez la fonction listDir pour répertorier les fichiers et sous-répertoires d’un répertoire donné :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
</head>
<body>
<script>
const client = new OSS({
// Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set yourRegion to oss-cn-hangzhou.
region: 'yourRegion',
authorizationV4: true,
// The temporary AccessKey pair (AccessKey ID and AccessKey secret) obtained from STS.
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// The security token (SecurityToken) obtained from STS.
stsToken: 'yourSecurityToken',
// Specify the bucket name. For example, examplebucket.
bucket: "examplebucket",
});
async function listDir(dir) {
try {
let result = await client.list({
prefix: dir,
// Set the delimiter for directories to a forward slash (/).
delimiter: "/",
});
result.prefixes.forEach(function (subDir) {
console.log("SubDir: %s", subDir);
});
result.objects.forEach(function (obj) {
console.log("Object: %s", obj.name);
});
} catch (e) {
console.log(e);
}
}
listDir();
</script>
</body>
</html>
La liste des fichiers renvoyée est la suivante :
> listDir('foo/')
=> SubDir: foo/bar/
SubDir: foo/hello/
Object: foo/x
Object: foo/y
> listDir('foo/bar/')
=> Object: foo/bar/a
Object: foo/bar/b
> listDir('foo/hello/C/')
=> Object: foo/hello/C/1
Object: foo/hello/C/2
...
Object: foo/hello/C/9999
Références
Pour plus d’informations sur l’opération API, consultez GetBucket (ListObjects).