Nodejs获取存储桶信息?

新手上路,请多包涵

我使用Nodejs SDK获取了存储桶的详细信息,但是获取到的信息和网站中显示的不一样:

拿一个存储桶举例:
image.png

我在网站中设置了三个存储桶,里面的文件数目都不为0,但是使用Nodejs获取到的存储桶信息文件数目都是0

下面是代码:

  const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
  const config = new qiniu.conf.Config();
  const bucketManager  new qiniu.rs.BucketManager(mac, config);

      const bucketNames = await new Promise<string[]>((resolve, reject) => {
        bucketManager.listBucket((err, respBody, respInfo) => {
          if (err) return reject(err);
          resolve(respBody);
        });
      });
      const bucketInfoPromise = await Promise.all(
        bucketNames.map(
          (bucket) =>
            new Promise((resolve, reject) => {
              bucketManager.getBucketInfo(bucket, (err, respBody) => {
                if (err) {
                  return reject(err);
                }

                resolve(respBody);
              });
            })
        )
      );

下面的数据是返回结果:

"fragment_opt": {
                    "fragment_size": 0,
                    "ignore_etag_check": false
                },
                "protected": 0,
                "separator": "-",
                "transcode_styles": null,
                "styles": null,
                "refresh_time": 0,
                "refer_wl": null,
                "refer_bl": null,
                "no_refer": false,
                "source_enabled": false,
                "anti_leech_mode": 0,
                "private": 0,
                "no_index_page": 1,
                "cdn_auto_refresh": false,
                "cdn_auto_refresh_styled": false,
                "cdn_auto_refreshed_styles": null,
                "prefer_style_as_key": false,
                "max_age": 0,
                "gzip_close": false,
                "no_max_age": false,
                "mac_key": "",
                "mac_key2": "",
                "token_anti_leech": 0,
                "channel": null,
                "persist_fop": 0,
                "zone": "z0",
                "region": "z0",
                "global": false,
                "versioning": false,
                "encryption_enabled": false,
                "line": false,
                "type": 0,
                "notify_queue": "",
                "notify_message": "",
                "notify_message_type": "",
                "ouid": 0,
                "otbl": "",
                "oitbl": 0,
                "perm": 0,
                "share_users": null,
                "bucket_rules": null,
                "bucket_events": null,
                "fop_accs_wlist": null,
                "remark": "",
                "routing_rules": null,
                "ctime": "2024-03-16T03:16:41.000Z",
                "file_num": 0,
                "storage_size": 0
            }

"fragment_opt": {
                    "fragment_size": 0,
                    "ignore_etag_check": false
                },
                "protected": 0,
                "separator": "-",
                "transcode_styles": null,
                "styles": null,
                "refresh_time": 0,
                "refer_wl": null,
                "refer_bl": null,
                "no_refer": false,
                "source_enabled": false,
                "anti_leech_mode": 0,
                "private": 1,
                "no_index_page": 1,
                "cdn_auto_refresh": false,
                "cdn_auto_refresh_styled": false,
                "cdn_auto_refreshed_styles": null,
                "prefer_style_as_key": false,
                "max_age": 0,
                "gzip_close": false,
                "no_max_age": false,
                "mac_key": "",
                "mac_key2": "",
                "token_anti_leech": 0,
                "channel": null,
                "persist_fop": 0,
                "zone": "z0",
                "region": "z0",
                "global": false,
                "versioning": false,
                "encryption_enabled": false,
                "line": false,
                "type": 0,
                "notify_queue": "",
                "notify_message": "",
                "notify_message_type": "",
                "ouid": 0,
                "otbl": "",
                "oitbl": 0,
                "perm": 0,
                "share_users": null,
                "bucket_rules": null,
                "bucket_events": null,
                "fop_accs_wlist": null,
                "remark": "",
                "routing_rules": null,
                "ctime": "2025-02-19T05:35:45.000Z",
                "file_num": 0,
                "storage_size": 0
"fragment_opt": {
                    "fragment_size": 0,
                    "ignore_etag_check": false
                },
                "protected": 0,
                "separator": "-",
                "transcode_styles": null,
                "styles": null,
                "refresh_time": 0,
                "refer_wl": null,
                "refer_bl": null,
                "no_refer": false,
                "source_enabled": false,
                "anti_leech_mode": 0,
                "private": 1,
                "no_index_page": 1,
                "cdn_auto_refresh": false,
                "cdn_auto_refresh_styled": false,
                "cdn_auto_refreshed_styles": null,
                "prefer_style_as_key": false,
                "max_age": 0,
                "gzip_close": false,
                "no_max_age": false,
                "mac_key": "",
                "mac_key2": "",
                "token_anti_leech": 0,
                "channel": null,
                "persist_fop": 0,
                "zone": "z2",
                "region": "z2",
                "global": false,
                "versioning": false,
                "encryption_enabled": false,
                "line": false,
                "type": 0,
                "notify_queue": "",
                "notify_message": "",
                "notify_message_type": "",
                "ouid": 0,
                "otbl": "",
                "oitbl": 0,
                "perm": 0,
                "share_users": null,
                "bucket_rules": null,
                "bucket_events": null,
                "fop_accs_wlist": null,
                "remark": "",
                "routing_rules": null,
                "ctime": "2025-02-28T02:43:35.000Z",
                "file_num": 0,
                "storage_size": 0

我希望知道怎么样才能获取完整的存储桶信息,希望尽快得到答复!!!

阅读 539
2 个回答

bucketManager.listPrefix是获取文件列表的方法。我试了可以获得特定存储桶下的文件列表。下面是AI给出的代码:

const qiniu = require("qiniu");

// 设置 Access Key 和 Secret Key
const accessKey = "你的 Access Key";
const secretKey = "你的 Secret Key";
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);

// 配置对象
const config = new qiniu.conf.Config();
// 选择存储区域(这里以华东区为例)
config.zone = qiniu.zone.Zone_z0;

// 创建 BucketManager 实例
const bucketManager = new qiniu.rs.BucketManager(mac, config);

// 指定存储桶名称
const bucket = "你的存储桶名称";

// 配置列举条件
const options = {
  limit: 10, // 每次列举的最大文件数(最大 1000)
  prefix: "", // 只列出指定前缀的文件
};

// 调用 listPrefix 方法列举文件
bucketManager.listPrefix(bucket, options, function (err, respBody, respInfo) {
  if (err) {
    console.error("获取文件列表出错:", err);
    throw err;
  }

  if (respInfo.statusCode === 200) {
    const items = respBody.items;
    items.forEach((item) => {
      console.log(`文件名: ${item.key},大小: ${item.fsize},MIME类型: ${item.mimeType}`);
    });
  } else {
    console.log("请求失败,状态码:", respInfo.statusCode);
    console.log(respBody);
  }
});
新手上路,请多包涵

换个 api试下呢
用 bucketManager.listPrefix
代码 参考ai生成的

// 存储桶名称和前缀(如果需要)
const bucket = 'your-bucket-name';
const prefix = ''; // 可以指定前缀来过滤文件
const limit = 1000; // 每次请求的最大文件数

// 获取文件列表的函数
function listFiles(bucket, prefix, limit, marker = '') {
    return new Promise((resolve, reject) => {
        bucketManager.listPrefix(bucket, { prefix, limit, marker }, (err, respBody, respInfo) => {
            if (err) {
                reject(err);
                return;
            }
            if (respInfo.statusCode === 200) {
                resolve(respBody);
            } else {
                reject(new Error(`Failed to list files: ${respInfo.statusCode}`));
            }
        });
    });
}

// 递归获取所有文件的函数
async function getAllFiles(bucket, prefix, limit) {
    let marker = '';
    let allFiles = [];

    while (true) {
        try {
            const result = await listFiles(bucket, prefix, limit, marker);
            const { items, marker: nextMarker } = result;

            allFiles = allFiles.concat(items);

            if (!nextMarker) {
                break; // 如果没有下一页了,退出循环
            }
            marker = nextMarker;
        } catch (error) {
            console.error('Error listing files:', error);
            break;
        }
    }

    return allFiles;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题