Node.js Google 云存储获取多个文件的元数据

Node.js Google Cloud Storage Get Multiple Files' Metadata

我在 Google Cloud Storage 上有几个名为 0.jpg、1.jpg、2.jpg 等的文件。我想获取每个文件的元数据无需单独设置文件名。然后,要将这些元数据信息发送给 React 应用程序。在 React 应用程序中,当单击图像时,弹出窗口会显示该单击图像的元数据信息。

对于一个文件,我使用了以下代码:

const express = require("express");
const cors = require("cors");
// Imports the Google Cloud client library
const { Storage } = require("@google-cloud/storage");

const bucketName = "bitirme_1";
const filename = "detected/0.jpg";

const storage = new Storage();

const app = express();

app.get("/api/metadata", cors(), async (req, res, next) => {
  try {

    // Gets the metadata for the file
    const [metadata] = await storage
      .bucket(bucketName)
      .file(filename)
      .getMetadata();

    const metadatas = [
      {id: 0, name: `Date: ${metadata.updated.substring(0,10)}, Time: ${metadata.updated.substring(11,19)}`},
      {id: 1, name: metadata.contentType}
    ];

    res.json(metadatas);
  } catch (e) {
    next(e);
  }
});

const port = 5000;

app.listen(port, () => console.log(`Server started on port ${port}`));

我先设置桶名。然后,设置文件名数组为(89为文件数):

const filename = Array(89).fill(1).map((_, i) => ('detected/' + i + '.jpg'));

这些文件位于检测到的文件夹中。当我尝试这个时,它给了我这个错误:

错误:没有这样的对象:bitirme_1/detected/0.jpg、detected/1.jpg、detected/2.jpg、detected/3.jpg、detected/4.jpg ,detected/5.jpg,detected/6.jpg, ....

如何解决获取多个文件的元数据问题?

此外,我想获取存储桶中(或检测到的文件夹中)的文件数。我搜索了 API 但找不到任何东西。我不想输入文件总数为89,想从API.

中获取

我找到了查找存储桶中的文件数或存储桶中的文件夹数的解决方案。这是解决方案:

const [files] = await storage.bucket(bucketName).getFiles();

const fileStrings = files.map(file => file.name);

const fileSliced = fileStrings.map(el => el.slice(9, 11));

for (i = 0; i < fileSliced.length; i++) {
  if (fileSliced[i].includes('.')) {
    fileSliced[i] = fileSliced[i].slice(0, 1);
  }
}

const fileNumbers = fileSliced.map(function(item) {
  return parseInt(item, 10);
});

const numOfFiles = Math.max(...fileNumbers) + 1;

console.log(numOfFiles);

首先,我得到了字符串数组中所有文件名的文件。在我的例子中,文件名是 detected/0.jpg、detected/1.jpg、detected/2.jpg 等。我只想要文件名的数字部分;因此,我将字符串数组从第 9 个索引开始切片到第 11 个索引(不包括在内)。结果,我只得到了除一位数字之外的数字。

处理一个数字的大小写,其中有'.'在切片名称的末尾,我还删除了“。”来自这些一位数字的文件名。

结果,我得到了 ['0', '1', '2', '3', ...]。接下来,我使用 parseInt 函数将这个字符串数组转换为数字数组。最后,为了得到文件的数量,我得到了数组的最大值并将这个数字加1。

我有一个图像详细信息组件,其中包括发件人 ip 的位置、下载选项和退出弹出页面。此详细信息弹出页面在 /#i 处打开,其中 i 是图像文件的名称,例如 1.jpg、2.jpg。因此,例如,当我单击第一张图片时,弹出页面将在 /#1 处打开。在这个弹出页面中,我想获取打开图像的元数据信息。但是,我找不到解决方案。