1

AWS-SDKでは、次の形式のルビーコードが一覧表示されます。

 s3 = AWS::S3.new
 bucket = s3.buckets[bucket_name]
 tree = bucket.as_tree(:prefix => 'myshop/products')
 directories = tree.children.select(&:branch?).collect(&:prefix)

失敗エラー:「S3リストオブジェクトの応答でマーカーが見つかりません」

ディレクトリの構造

/myshop/products/1474472/original.jpg
/myshop/products/1474472/small.jpg
/myshop/products/1474472/mini.jpg
/myshop/products/1333333/original.jpg
/myshop/products/1333333/small.jpg
/myshop/products/1333333/mini.jpg

..。

100000obj以上

ディレクトリ(「1474472」など)が作成されたことを確認したい

私の計画:aws-s3-list-> ruby​​-array-> find in array(array.include?)

!!!非常に高速な方法が必要です-すぐに世界の終わり:)

4

3 に答える 3

0

AmazonS3にはフォルダのようなものはありません。これは「フラットな」ファイルシステムです。この答えを見てください。

本当に探しているのは、特定のプレフィックス( "/ myshop / products / 1474472"など)がバケットに存在するかどうかを確認することです。
彼らのRESTAPIは間違いなくそれをサポートしています。ドキュメントをご覧ください。prefixパラメータとして渡すことができる、指定されたに一致するキー(「ファイル名」)をリストする必要があります。max-keysパラメータをに設定して、通話を最適化することもできます1。そうすれば、応答でゼロ以外の量のアイテムを受け取った場合、バケットには、指定されたプレフィックスで始まる名前のファイルがすでに含まれています。

于 2012-11-23T12:35:07.303 に答える
0
aws s3 cp s3://bucket/tmp/foo/ . --recursive --exclude "*" --include "*1474472" 

https://docs.aws.amazon.com/cli/latest/reference/s3/index.html#use-of-exclude-and-include-filters

于 2018-05-02T17:48:30.733 に答える
0

理想的な方法は、S3に書き込んでいる間、アプリケーションを通じてリストを維持することです。EMRFSは、DynamoDBに詳細を保存することで同じことを行います。

S3Distcpなどのマニフェストを生成するためのリストを使用します。このようにして、コストのかかる操作であるリストにS3をヒットすることを回避できます。

于 2018-08-20T19:02:03.467 に答える