web-dev-qa-db-ja.com

オブジェクトがAWSS3のフォルダーであるかどうかをどのように判断できますか

オブジェクトがフォルダであるかどうかに関係なく、メタデータには表示されません。 SO知っている特定の方法はありますか?Google検索で価値のあるものが見つかりません。

19
user3363603

この応答が長い間役立つかどうかはわかりませんが、ここで説明します。

この問題を解決するには、Javaでこれを行う必要があります。

        List<S3ObjectSummary> files = s3client.listObjects(bucket.getName()).getObjectSummaries();
        for (S3ObjectSummary file : files) {
            if (file.getKey().endsWith("/"))
                System.out.println("----" + file.getKey() + " (ES CARPETA)");
            else 
                System.out.println("----" + file.getKey() + " NO NO NO");
        }

メソッド "endsWith("/")"を使用すると、S3ObjectSummaryがフォルダーであるかどうかを検出できます。

これが誰かを助けることができることを願っています。

マイク

11
Mike

S3にはフォルダの概念はありません。すべてのオブジェクトにはキー(名前など)があり、キーには/(スラッシュ)などの特殊文字を含めることができます。これにより、フォルダの感覚が得られます。

バケットの内容を一覧表示すると、すべてのオブジェクト(およびキー)の一覧が返されます。次に、キー文字列にスラッシュ(/)が含まれているかどうかを確認できます。含まれている場合は、オブジェクトが「フォルダのような」構造になっていることを理解してください。そうすれば、完全な詳細を取得できます。

「応答には、区切り文字を指定した場合にのみCommonPrefixesを含めることができます。指定した場合、CommonPrefixesには、プレフィックスと区切り文字で指定された文字列の次の出現との間のすべての(存在する場合)キーが含まれます。実際、CommonPrefixesはサブディレクトリのように機能するキーを一覧表示します。プレフィックスで指定されたディレクトリ内。たとえば、プレフィックスがnotes /で、区切り文字がスラッシュ(/)の場合、notes/summer/julyでは、共通のプレフィックスはnotes/summer /です。すべてのキーは共通のプレフィックスにロールアップされます。返品数を計算するときは、単一​​の返品としてカウントします。MaxKeysを参照してください。」 http://docs.aws.Amazon.com/AmazonS3/latest/API/RESTBucketGET.html

4
Sony Kadavan

OPの3年後、最近のGoogle検索に登場して以来、私は答えを提供しています。

「ディレクトリ」の概念は、最近のS3でもう少し洗練されており、これらのオブジェクトは「application/x-directory」のコンテンツタイプを受け取ります。

そのため、 AWS Ruby SDK(バージョン1) を使用している場合は、次のものを使用できます。

s3_client.buckets['some_bucket'].objects['some_directory_object'].content_type
4
wes.hysell

オブジェクトはフォルダではありません。ドキュメントから:

Amazon S3バケットには、一般的なコンピューターファイルシステムに見られるようなディレクトリ階層はありません。ただし、フォルダ構造を暗示するオブジェクトキー名を使用して、論理階層を作成できます。

最善の方法は、GETバケット(オブジェクトのリスト)を使用して、バケットの内容に関する情報を取得することです。

http://docs.aws.Amazon.com/AmazonS3/latest/API/RESTBucketGET.html

2
user602525