Appengine上的Node.js,google-cloud / storage:如何检查文件夹是否存在,如果存在,请从中获取所有文件?

时间:2018-08-05 17:44:49

标签: google-app-engine google-cloud-storage nodes gcloud

我很难从Node.js转换为Appengine @ google-cloud / storage。 要验证文件夹是否为最新,请执行一些简单的步骤:

  1. 检查文件夹是否存在。如果不是,则返回false,如果是->
  2. 检查文件名是否正确

在常规javascript中,运行起来像这样,没有问题:

if (!fs.existsSync(full_path)) {
    return false;
}
else {
    // else verify if all requiered files exist
    let check = true;
    let files = fs.readdirSync(full_path);
    allExpectedFiles.forEach((f) => {
        if (pfs.pfs.getFileName('pictures') !== f && files.indexOf(f) === -1) {
            // console.log(c.cyan, 'Not found file: ' + f);
            check = false;
        }
    });
    return check;
}

使用@ google-cloud / storage库...我无法使其正常工作。

我尝试过:

// if folder does not exist:
const dir = bucket.file(full_path);
let doesExist = await dir.exists();
console.info('For:', name, ' does folder exist?:',full_path, doesExist[0]);

if (!doesExist[0]) {
    // folder does not exist so it's not uptodate
    return false;
}

即使存在的人我也错了。

注1:如果我检查文件(添加文件名而不是以“ /”结尾),则它可以工作。但是我需要检查文件夹。

此外,我试图从文件夹中获取文件(通过检查文件对文件夹强制为true),我也无法获取它们。

        let files = await bucket.getFiles({prefix: full_path, delimiter:'.json'});
    console.log(c.magenta,'Here are the files:');
    console.log(files);

我什么都没有。我使用了前缀和分隔符,但是我无法使它们正常工作。

注2:我确实读过:How subdirectories works,但是……显然我听不懂。

有什么建议吗?我知道这应该是一个非常简单的任务,我无法使其正常工作。

以后的修改: 我设法获取文件,但只能作为“ all / the / long / path / filename.json”。我可以接受它,我将提取文件名,但是似乎出了点问题,并不是那么困难。这是我的代码:

let files = await bucket.getFiles({
        prefix   : full_path
    });
    files = files[0];
    files.forEach((f)=>{
        console.log(c.magenta, 'Fisierele cele multe:', f.name);
    });

1 个答案:

答案 0 :(得分:2)

Cloud Storage中确实没有目录。它们只是基于文件路径进行仿真。

因此,只需跳过检查目标目录是否存在并创建目录的步骤,然后直接检查“目录”中的文件,然后根据要检查的源目录构建文件路径即可。