gpt4 book ai didi

groovy - 从代码中删除 S3 中的子目录, 'delimiter' 参数的定义,Groovy 中的代码

转载 作者:行者123 更新时间:2023-12-01 05:36:38 28 4
gpt4 key购买 nike

我有一个观察可以帮助其他人使用 S3 和下面的问题。这里的示例代码使用 JetS3t Java 库在 Groovy 中,但这些概念适用于任何编程语言。

我在 Slashdot 和其他地方找到了很多文档,声称 S3 没有存储桶中的子目录概念。这大多是真的。当您要删除文件时,您会发现必须首先使用以下方法找到它们:

  //assume we are looking for all files in 'stuff' directory
files = s3.listObjects(bucket, 'stuff/', null)

现在,如果您删除这些文件,您仍然会留下一些看起来非常像存储桶中的子目录的东西。您仍会看到列出的“东西/”。所以这让我怀疑是否真的没有子目录。事实证明确实没有真正的子目录,但某些文件伪装成子目录并显示在列表中。通过一点点探索,我确定这是另一个 S3 对象,它的键名带有附加到键的特殊字符串 _$folder$。所以你可以通过执行以下操作来删除它(假设上面的东西示例):
   s3.deleteObject(bucket, 'stuff_$folder$')

现在,您将不再看到为该存储桶中的内容列出的任何子目录。虽然我还没有测试过这个,但我认为在尝试删除键 'stuff_$folder$' 之前,东西/文件夹必须已经是空的。令我惊讶的是,在这里的所有帖子中都没有提到这一点,所以任何试图删除整个子目录的人可能都有子目录本身仍然存在!

如果你回到我原来的 listObjects 调用并执行以下操作:
   files = s3.listObjects(bucket, 'stuff', null) //note, no trailing slash

您将看到结果中返回的 stuff_$folder$。我的问题是您可能还会得到以关键“东西”开头但不包含在“子目录”中的其他对象。所以你必须小心。所以我的偏好是传递 'stuff/' 作为键,然后分别处理 'stuff_$folder_' 对象。

这让我想到最后一个问题。我似乎无法清楚地解释 listObjects(bucket, key, delimiter) 调用中的最后一个参数的含义。究竟什么是“分隔符”。它似乎并不意味着“文件分隔符”(如'/')。我已经搜索过,但似乎无法找到一个示例来说明这意味着什么或如何使用它。我想知道,因为是否有任何方法可以提高我想知道的 listObjects 的实用性和灵活性。有人可以提供一个示例来说明分隔符参数的用法和含义吗?我确信它很简单,我只是找不到一个很好的例子。

最佳答案

分隔符是一个笨拙的名字。如果您将其视为后缀,则更有意义。来自 S3 文档 - http://aws.amazon.com/releasenotes/Amazon-S3/213或者如果您更喜欢稍微不同的解释 http://www.bucketexplorer.com/documentation/amazon-s3--search-on-objects-in-bucket.html

Groups of keys that share a common prefix terminated by a special delimiter can now be rolled-up by that prefix for the purposes of listing. This allows applications to browse their keys hierarchically, much like how you would navigate through directories in a filesystem.

For example, if you had a bucket that contained the following keys (named with embedded slash delimiters to simulate directories) photos/2006/index.html photos/2006/January/img0001.jpg ... photos/2006/January/img0999.jpg photos/2006/February/img1000.jpg ... A list query with Prefix="photos/2006/" and Delimiter="/" would return the keys and "subdirectories" at the photos/2006 level (index.html, January, February, ...) but would not include any of the .jpg keys at deeper levels.



所以想想就够了。您的分隔符可以是 .html、.jpg 或类似格式。

关于groovy - 从代码中删除 S3 中的子目录, 'delimiter' 参数的定义,Groovy 中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8269821/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com