【问题标题】:Get list of objects from s3 bucket (min.io or amazon) using promise使用 promise 从 s3 存储桶(min.io 或 amazon)中获取对象列表
【发布时间】:2020-10-14 19:40:04
【问题描述】:

我正在尝试使用 min.io javascript API (https://docs.min.io/docs/javascript-client-api-reference#listObjectsV2) 从 s3 存储桶中获取对象名称列表。 API 返回一个流。但是,我总是得到一个空列表。

dataStream的例子是:

{
  name: 'sample-mp4-file-1.mp4',
  lastModified: 2020-10-14T02:35:38.308Z,
  etag: '5021b3b7c402468d5b018a8b4a2b448a',
  size: 10546620
}
{
  name: 'sample-mp4-file-2.mp4',
  lastModified: 2020-10-14T15:54:44.672Z,
  etag: '5021b3b7c402468d5b018a8b4a2b448a',
  size: 10546620
}

我的功能

public async listFiles(
        bucketName: string,
        prefix?: string
    ): Promise<string[]> {
        const objectsList = [];
        await minioClient.listObjectsV2(bucketName, "", true, "", function(
            err,
            dataStream
        ) {
            if (err) {
                console.log("Error listFiles: ", err);
                return;
            }

            console.log("Succesfully get data");


            dataStream.on("data", function(obj) {
                objectsList.push(obj.name);
            });

            dataStream.on("error", function(e) {
                console.log(e);
            });

            dataStream.on("end", function(e) {
                console.log("Total number of objects: ", objectsList.length);
            });
        });

        return objectsList;
    }

预期的输出是一个列表对象名称,[sample-mp4-file-1.mp4, sample-mp4-file-2.mp4]

【问题讨论】:

    标签: javascript node.js stream es6-promise minio


    【解决方案1】:

    根据文档,listObjectsV2() 正在返回一个流,而不是一个承诺。因此,await 会立即返回,在 objectsList 将包含任何内容之前。

    如果你想await Promises,你使用的 API 必须支持 Promises。

    您可以通过执行以下操作来解决此问题:

    const objectsList = await new Promise((resolve, reject) => {
      const objectsListTemp = [];
      const stream = minioClient.listObjectsV2(bucketName, '', true, '');
      
      stream.on('data', obj => objectsListTemp.push(obj.name));
      stream.on('error', reject);
      stream.on('end', () => {
        resolve(objectsListTemp);
      });
    });
    

    【讨论】:

    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多