Список файлов gcloud bucket в приложении node.js - PullRequest
0 голосов
/ 09 апреля 2020

Я хотел бы отобразить список файлов моего хранилища Google в моем приложении node.js и хотел бы узнать, возможно ли это или мне нужно go другим способом? Спасибо

1 Ответ

0 голосов
/ 09 апреля 2020

Вот пример, который я написал в Node.js 10 для стандарта GAE, который вы можете использовать и адаптировать:

app. js

'use strict';

const express = require('express');
const {Storage} = require('@google-cloud/storage');

const app = express();

app.get('/', async(req, res) => {
  let bucketName = '<BUCKET-NAME>'

  // Initiate a Storage client
  const storage = new Storage();

  // List files in the bucket and store their name in the array called 'result'
  const [files] = await storage.bucket(bucketName).getFiles();
  let result = [];
  files.forEach(file => {
    result.push(file.name);
  });

  // Send the result upon a successful request
  res.status(200).send(result).end();
});

// Start the server
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});

module.exports = app;

пакет. json

{
  "name": "nodejs-app",
  "engines": {
    "node": ">=8.0.0"
  },
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "^4.16.3",
    "@google-cloud/storage": "^4.1.3"
  }
}

app.yaml

runtime: nodejs10

Чтобы получить список с URL вместо имен файлов измените следующий фрагмент в приложении . js образец, представленный выше:

const [files] = await storage.bucket(bucketName).getFiles();
  let result = [];
  files.forEach(file => {
    result.push("https://storage.cloud.google.com/" + bucketName + "/" + file.name);
  });

РЕДАКТИРОВАТЬ: получение объектов 'metadata

Вот код, который вы можете использовать для получения метаданных объектов:

const [files] = await storage.bucket(bucketName).getFiles();
let result = [];
for (const file of files) {
  const [metadata] = await file.getMetadata();
  result.push(metadata.size);
};
res.status(200).send(result).end();

Node.js Ссылка на клиентскую библиотеку

...