【问题标题】:How to get files from Google Cloud Storage bucket based on a regular expression?如何根据正则表达式从 Google Cloud Storage 存储桶中获取文件?
【发布时间】:2018-10-20 18:41:14
【问题描述】:

我正在尝试从谷歌云存储桶中获取文件。文件名类似于20180618_1400/SOMEID_20180618.jpg20180618_1200/SOMEID_20180618.jpg20180617_1400/SOMEOTHERID_20180617.jpg 等。

我想获取基于SOMEID 的文件。 我尝试使用以下代码与 reg exp

bucket.getFiles({ prefix: new RegExp(`[0-9_]*\/SOMEID_`), }, (err, files) => { if (err) return reject(err); resolve(files); });

预期结果是文件20180618_1400/SOMEID_20180618.jpg20180618_1200/SOMEID_20180618.jpg。但是代码返回了bucket中的所有文件。

我在互联网上搜索但找不到任何东西。

还有其他方法可以实现吗?

【问题讨论】:

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


    【解决方案1】:

    前缀必须是字符串。这是前缀,而不是正则表达式。我看了看以确保 in documentation 并且正如预期的那样,这是不可能的。

    在 GCS 中执行此操作的正确方法是将存储桶以前缀作为可用字符串的方式构造。例如,有一个用于个人资料图片的目录,另一个用于 pdf 的目录,...并且所有文件都以您的用户 ID 命名。

    例子:

    profiles/1245.jpg
    profiles/7561.jpg
    billing/1245-2018-10.pdf
    billing/1245-2018-09.pdf
    billing/7561-2018-10.pdf
    ...
    

    如果您不能,您将必须获取所有项目,然后在其上应用您的正则表达式。 getFiles() 文档末尾有一个示例

    我认为(已经有一段时间了),您可以使用 gsutils 使用正则表达式,但 gsutils 会获取所有文件,然后在客户端应用正则表达式,因此这不是一个更好的解决方案。

    【讨论】:

    • 谢谢。我也是这么想的,但只是想知道它是否可能。
    • 另一种方法是只执行一次 getFiles,并将路径存储在您的数据库中。然后你可以在你的数据库条目上应用你的正则表达式。但是拥有更好的 GCS 结构对我来说是最好的解决方案。
    • 我将改变我的 GCS 结构。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 2017-10-16
    • 1970-01-01
    • 2020-05-05
    • 2018-06-18
    • 2015-09-27
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多