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 处打开。在这个弹出页面中,我想获取打开图像的元数据信息。但是,我找不到解决方案。
我在 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 处打开。在这个弹出页面中,我想获取打开图像的元数据信息。但是,我找不到解决方案。