当前位置: 首页 > 面试题库 >

S3 Boto列表键有时返回目录键

怀晋
2023-03-14
问题内容

我注意到,根据存储桶的位置,boto api的收益之间存在差异。我有以下代码:

con = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = con.get_bucket(S3_BUCKET_NAME)
keys = bucket.list(path)
for key in keys:
  print key

我在两个水桶里奔跑,一个在美国西部,一个在爱尔兰。该存储桶中的路径是一个子目录,对爱尔兰,我得到子目录和下面的任何键,对我们西部,我只得到下面的键。

因此,爱尔兰给出:

<Key: <bucketName>,someDir/>
<Key: <bucketName>,someDir/someFile.jpg>
<Key: <bucketName>,someDir/someOtherFile.jpg>

美国标准规定:

<Key: <bucketName>,someDir/someFile.jpg>
<Key: <bucketName>,someDir/someOtherFile.jpg>

显然,无论存储桶位于何处,我都希望能够编写相同的代码。任何人都知道我可以采取任何措施来解决此问题,因此我可以获得相同的可预测结果。或即使是boto引起问题或S3。我注意到爱尔兰对存储桶的命名有不同的政策,不同的本地人是否有自己的api版本?

谢谢,


问题答案:

感谢Steffen,他建议研究一下密钥的创建方式。经过进一步的调查,我认为我已经掌握了这里发生的事情。我最初的推测是,它与水桶区域有关,是一条红色鲱鱼。这似乎是由于管理控制台在您操作键时所做的。

如果在管理控制台中创建目录,它将创建一个0字节的密钥。当您执行列表时,将返回该值。

如果使用boto创建/上传文件,则不会创建文件夹。有趣的是,如果您从文件夹中(从AWS控制台)删除文件,则会为用于包含密钥的文件夹创建一个密钥。如果您随后使用boto重新上载bey,则UI中的外观结构完全相同,但实际上您有一个伪造的目录附加键。这就是我正在发生的事情,当我测试应用程序时,我先清除了密钥,然后发现了不同的结果。

值得一提的是。UI中没有指示符可显示文件夹是已创建的文件夹(将作为密钥返回的文件夹)还是已解释的文件夹(基于密钥名称)。



 类似资料:
  • 我有一个带有键的HashMap,值是字符串。我想通过以字符串“locationid”开头的键值过滤HashMap,并将键中的值返回到字符串数组列表中。HashMap的填充方式如下: 我需要arraylist中的ORG_Id值。 我找不到可以将值放入字符串列表的位置。编译错误是它不识别values()方法。 更新还尝试将筛选后的Hashmap放入另一个Hashmap中,如下所示: 但得到的编译错误是

  • 问题内容: 我是Redis的新手,正在阅读文档,但找不到解决问题的方法。 我有一个包含名称和电话号码的hash,我想获取hash中键的排序列表。 所以我的哈希(电话簿)看起来像这样: 如果我运行,我会得到此信息(密钥将在存储时返回): 我想得到这个(有序键): 我该如何存档?我使用的数据结构正确吗? 问题答案: 您可以使用排序集而不是哈希来实现此目的,并且不需要维护并行列表。全部包含在一个结构中…

  • 我有以下数据: 获取密钥列表的最佳方法是什么(好像它是一个dict而不是一个数组)?目前我正在做: 但这感觉有点老土

  • 问题内容: 我目前正在尝试制作一个将动词与西班牙语共轭的程序。我创建了一个哈希表,其中包含一个键和对象Ve​​rb的实例化。键是具有动词不定式形式的字符串(例如“ hablar”)。这是到目前为止我对哈希映射的代码: HashMap中每个动词的键都基于动词的不定式形式。例如,字符串“ hablar”是西班牙语动词的键。Verb类具有一个名为getInfinitive()的方法,该方法返回一个字符串

  • 输入是一个哈希映射,比如 我想写一个方法,返回类型A的列表,其中有键,值属性与字符串类型,和键值从hashmap。 如何让它成为现实?

  • 我有一个,我希望在其中返回字符串值的列表,但按int键的升序/降序排序。如果返回的是我也希望排序的迭代项,例如返回或列表,那么这将很容易,但是我想不出一种方法来做到这一点,除了在使用遍历整个映射并插入值以从映射键索引(如下面所示)之后手动创建一个列表,然后在该列表中嵌套另一个以消除任何空值之外。 请告诉我有更好更有效的方法吗?任何帮助都是非常感谢的!