[解決済み] AWS S3バケットの特定の "フォルダ "にあるファイルをリストアップする
質問
S3バケットに含まれる特定のフォルダに含まれるすべてのファイルをリストアップする必要があります。
フォルダの構造は以下の通りです。
/my-bucket/users/<user-id>/contacts/<contact-id>
ユーザーに関連するファイルと、あるユーザーの連絡先に関連するファイルがあります。 両方をリストアップする必要があります。
ファイルをリストアップするために、私はこのコードを使っています。
ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName("my-bucket")
.withPrefix("some-prefix").withDelimiter("/");
ObjectListing objects = transferManager.getAmazonS3Client().listObjects(listObjectsRequest);
特定のユーザーのファイルをリストアップするために、このプレフィックスを使っています。
users/<user-id>/
を除いたディレクトリにあるすべてのファイルを正しく取得しています。
contacts
といったサブディレクトリを除いたディレクトリにあるすべてのファイルを正しく取得しています。
users/<user-id>/file1.txt
users/<user-id>/file2.txt
users/<user-id>/file3.txt
特定のユーザーコンタクトのファイルをリストアップするために、代わりにこのプレフィックスを使用しています。
users/<user-id>/contacts/<contact-id>/
しかし、この場合、返されるオブジェクトとして ディレクトリ自体も返されます。
users/<user-id>/contacts/<contact-id>/file1.txt
users/<user-id>/contacts/<contact-id>/file2.txt
users/<user-id>/contacts/<contact-id>/
なぜこのような動作になるのでしょうか?2 つのリスト要求の間で何が違うのですか? 私は、サブディレクトリを除いて、ディレクトリ内のファイルのみを一覧表示する必要があります。
どのように解決するのですか?
S3では、すべてがオブジェクトです。あなたにとって、それはファイルやフォルダーかもしれない。しかし、S3にとって、それらはただのオブジェクトである。
デリミターで終わるオブジェクト(
/
で終わるオブジェクトは、通常フォルダとして認識されますが、必ずしもそうとは限りません。それはアプリケーションによります。繰り返しになりますが、あなたの場合、フォルダと解釈していますね。S3はそうではありません。ただの別のオブジェクトです。
上のあなたのケースでは、オブジェクト
users/<user-id>/contacts/<contact-id>/
は別個のオブジェクトとしてS3内に存在しますが、オブジェクト
users/<user-id>/
は存在しません。それが皆さんの反応の違いです。なぜそうなっているのかは、私たちにはわかりませんが、誰かが一方ではオブジェクトを作り、他方では作っていないのです。AWSマネジメントコンソールで見えないのは、コンソールがフォルダと解釈して隠しているからです。
S3はこれらのものをオブジェクトとして見ているだけなので、あなたのために特定のものを"exclude"することはないでしょう。オブジェクトをどう扱うかは、クライアント次第です。
あなたのソリューション
フォルダオブジェクトを必要としないのはあなた自身なので、最後の文字が
/
. もしそうなら、そのオブジェクトをレスポンスから無視します。
関連
-
NullPointerException - java.lang.
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
SocketException java.netの4つの例外解決策。
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
ApiModel と @ApiModelProperty の使用法
-
[解決済み] S3バケットを丸ごとダウンロードする?
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】boto3 でバケツの中身を一覧表示する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
強制型変換について
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
セミコロン期待値エラー解決
-
java.sql.SQLException: 結果セットの開始前
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
テストが空であるかどうかを判断するためのオプションの処理
-
Zipファイルの圧縮・解凍にantを使用する
-
CAS 5.1.8でhttpをサポートし、認証されていない認可サービスエラーのプロンプトが表示される問題を解決した。