使用NodeJS从Google Cloud Storage Bucket下载文件夹

时间:2019-03-01 20:41:27

标签: node.js google-cloud-platform google-cloud-storage

我需要从Google Cloud Storage的Buckek中使用NodeJS下载文件夹。我阅读了所有文档,仅找到一种下载文件而非文件夹的方法。我需要获取该文件夹以提供用户的下载文件。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

正如Doug所说,Google Cloud Storage会向您显示不同目录的结构,但是存储桶中实际上没有文件夹。

但是,您可以在代码中找到一些解决方法,以自己创建完全相同的文件夹结构。对于我想出的解决方法,您需要使用诸如shelljs之类的库,这些库将允许您在系统中创建文件夹。

在此GCP tutorial on Cloud Storage之后,您将找到例如有关如何从存储桶中列出或下载文件的示例。

现在,将所有这些放在一起,您可以获得要下载的文件的完整路径,将其解析以将文件夹与实际文件分开,然后使用方法mkdir从以下目录创建文件夹结构shelljs。

对我来说,修改本教程中的文件下载方法是这样的:

var shell = require('shelljs');
[...]
async function downloadFile(bucketName, srcFilename, destFilename) {
  // [START storage_download_file]
  // Imports the Google Cloud client library
  const {Storage} = require('@google-cloud/storage');

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

  //Find last separator index
  var index = srcFilename.lastIndexOf('/');
  //Get the folder route as string using previous separator
  var str = srcFilename.slice(0, index);
  //Create recursively the folder structure in the current directory
  shell.mkdir('-p', './'+str);
  //Path of the downloaded file
  var destPath = str+'/'+destFilename;

  const options = {
    destination: destPath,
  };

  // Downloads the file
  await storage
    .bucket(bucketName)
    .file(srcFilename)
    .download(options);

  console.log(
    `gs://${bucketName}/${srcFilename} downloaded to ${destPath}.`
  );
  // [END storage_download_file]
}

答案 1 :(得分:0)

您将要使用Bucket的getFiles方法来查询要下载的文件,然后分别下载每个文件。 Read more about how to use the underlying list API。 Cloud Storage中没有文件夹操作(因为实际上没有任何文件夹,只有文件路径看起来像是组织为文件夹一样)。