Este tema describe cómo listar todos los archivos (Objects) en un bucket específico y cómo listar archivos y subdirectorios dentro de un directorio determinado.
Notas de uso
Si utiliza herramientas de empaquetado como Webpack o Browserify, instale OSS SDK for Browser.js mediante el comando npm install ali-oss.
Si desea acceder a un bucket de OSS desde un navegador pero no hay reglas CORS configuradas para dicho bucket, el navegador rechazará la solicitud. Por lo tanto, debe configurar reglas CORS en el bucket si pretende acceder a él desde un navegador. Para obtener más información, consulte Installation.
-
En la mayoría de los casos, OSS SDK for Browser.js se utiliza en navegadores. Para evitar que su par de AccessKey quede expuesto, le recomendamos usar credenciales de acceso temporal obtenidas mediante Security Token Service (STS) para acceder a OSS.
Las credenciales de acceso temporal consisten en un par de AccessKey y un token de seguridad. El par de AccessKey incluye un AccessKey ID y un AccessKey secret. Para más detalles sobre cómo obtener credenciales de acceso temporal, consulte Use STS for temporary access authorization.
Listar todos los archivos en un bucket
Utilice la función list para listar todos los archivos del bucket actual:
<!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>
Listar archivos y subdirectorios en un directorio específico
OSS no tiene un concepto de directorios; todos los elementos se almacenan como Objects. Para crear un directorio, genere un Object de 0 KB cuyo nombre termine con una barra diagonal (/). Este Object se puede cargar y descargar. La consola de OSS muestra los Objects que terminan con barra diagonal (/) como directorios. Use los parámetros Delimiter y Prefix para simular la funcionalidad de directorios:
Si establece Prefix con el nombre de un directorio, podrá listar todos los archivos que comiencen con ese prefijo. Esto enumera recursivamente todos los archivos y subdirectorios dentro de dicho directorio.
Si además configura Delimiter como una barra diagonal (/), la respuesta incluirá únicamente los archivos y subdirectorios de ese nivel. Los nombres de los subdirectorios se devuelven en la sección SubDir, mientras que los archivos y directorios contenidos en esos subdirectorios no se listan.
Suponga que un bucket contiene los siguientes archivos:
foo/x
foo/y
foo/bar/a
foo/bar/b
foo/hello/C/1
foo/hello/C/2
...
foo/hello/C/9999
Emplee la función listDir para listar los archivos y subdirectorios dentro de un directorio específico:
<!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 lista de archivos devuelta es a continuación:
> 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
Referencias
Para obtener más información sobre la operación de la API, consulte GetBucket (ListObjects).