2023年6月19日 【Google Cloud】Javaを使ってCloud Storageへフォルダをアップロードする方法 Java 検索する Popular tags 事例紹介 GEN-STEP 生成AI(Generative AI) Vertex AI Search Looker Studio BigQuery AlloyDB Google Workspace Cloud SQL Category Google Cloud Author うまし SHARE 目次 前提 Cloud Storageの準備:Bucket作成 Cloud Storageの準備:アクセス権 設定 Javaでアップロードの実装 動作確認 参考:Cloud Storageにおけるフォルダとは Content こんにちは、うましです! 今回はCloud Storageへのフォルダのアップロード方法について解説します! ファイルのアップロード方法は解説記事であふれていますが、 フォルダの構造を保持したままアップロードする方法は少なく、私自身苦戦したので、皆さまのご参考になれば嬉しいです! 前提 ・ファイルシステムからCloud Storageにフォルダをアップロードする ・フォルダ構造を保持したままアップロードする ・使用環境:Java1.8.0、Spring Cloud Storageの準備:Bucket作成 まずは、Cloud Storageの準備です。 Cloud Storageは「Bucket(バケット)」と呼ばれる箱にデータを出し入れできるサービスです。 では、早速Bucketを作っていきましょう。 1.Cloud Storage > バケットの画面から「+作成」ボタンを押下 2.必要事項を入力し「作成」ボタンを押下 ※本記事のメインではないため詳細は割愛します。 Cloud Storageの準備:アクセス権 設定 Cloud Storageへのアクセス権を付与します。 本来は、バケットごとへの権限付与や制限をする必要がありますが、 今回は細かいことは一旦忘れてサービスアカウントのアクセスキーを使用します。 1.サービスアカウントの鍵を作成 2.JSONキーを選択し、作成 3.JSONキーをローカルへ保存 ※このJSONファイルを使用してCloud Storageへのアクセス認証を行います Javaでアップロードの実装 では、準備が長かったですが本題のフォルダアップロードに入ります。 以下のような構造のフォルダを例にアップロードします。 hoge1 └-- hoge1.txt └-- hoge2 └-- hoge2.txt ざっくりですが、以下の流れで構造を保ったままフォルダをアップロードすることができました。 ブラウザからMultipartFile形式でフォルダを受け取る サービスアカウントファイルを使用して認証する MultipartFileをFor文でファイル1つずつアップロード処理を実行 (ファイル1つずつアップロードするならFor文だろ、、なんで苦戦したんだ、、というつっこみは内に留めておいてください。。) // 変数を宣言 String serviceAccountPath = [JSONファイルのパス]; String bucketName = [アップロード先のバケット名]; // 1.ブラウザからMultipartFile形式でフォルダを受け取る public static void uploadObject(String serviceAccountPath, List<MultipartFile> multiFiles, String bucketName){ // 2.サービスアカウントファイルを使用して認証する Storage storage = StorageOptions.newBuilder().setCredentials( ServiceAccountCredentials.fromStream( new FileInputStream(serviceAccountPath))) .build().getService(); // 3.MultipartFileをFor文でファイル1つずつアップロード処理を実行 for(MultipartFile multiFile : multiFiles){ // 4.アップロード処理を実行 // マルチパートファイルからinputstreamを取得する InputStream inputStream = multiFile.getInputStream(); // アップロードするファイル名を取得する String fileName = multiFile.getOriginalFilename(); // バケット名とファイル名からBlobInfoを作成する BlobInfo blobInfo = BlobInfo.newBuilder(bucketName, fileName).build(); // WriteChannelをストレージとBlobInfoから作成する WriteChannel uploadWriter = storage.writer(blobInfo); // アップするデータを細切れにして書き込む byte[] buffer = new byte[10 * 1024 * 1024]; int limit; while ((limit = inputStream.read(buffer)) >= 0){ ByteBuffer byteBuffer = ByteBuffer.wrap(buffer, 0, limit); // BlobInfoへinputstreamのコンテンツを書き込む uploadWriter.write(byteBuffer); } } } ※このままだとメモリが開かれっぱなしなので適宜close()を入れましょう 動作確認 では動かしていきましょう。 作成したバケットにアップロードされていますね! フォルダ構成も保持されているのがわかります! 参考:Cloud Storageにおけるフォルダとは 上記のように、コンソール上で確認するとフォルダ構造が保持されて見えますが、 Cloud Storageでは、実はフォルダという概念は存在しません。 hoge1 └-- hoge1.txt └-- hoge2 └-- hoge2.txt バケットの中に、2つのオブジェクトが存在するだけです。 hoge1というフォルダは存在せず、文字列「hoge1」がオブジェクト名の一部になるだけです。 hoge1/hoge1.txt hoge1/hoge2/hoge2.txt なので、MultipartFileをfor文で回すだけで、フォルダ構造を維持してアップロードできるんですね! ここで注意なのが、オブジェクトとして判定されないため下図のhoge3はアップされないということです。 hoge1 └-- hoge1.txt └-- hoge2 └-- hoge2.txt └-- hoge3 今回はフォルダ構造を保持したままフォルダをアップロードする方法について紹介しました。 いかがでしたでしょうか? 参考になった!わかりにくい!などご感想いただけると嬉しいです! 当社、システムサポートは、Google Cloudの導入・移行・運営支援を行っています。 お手持ちのデータのGoogle Cloud BigQuery移行、データの可視化のご相談は、以下よりお願いいたします。 Google Cloud導入についてのお問い合わせはこちら 頂きましたご意見につきましては、今後のより良い商品開発・サービス改善に活かしていきたいと考えております。 参考になった! わかりにくい。 役に立った Cloud Storageを使うハードルが下がった! ダウンロードの方法も知りたい! Author うまし 株式会社システムサポート BSG事業部 2020年度新卒入社。 Web系のシステム開発現場に携わる。 体を動かすことが好きで、先日自転車で300㎞走破。 Java 2023年6月19日 【Google Cloud】Javaを使ってCloud Storageへフォルダをアップロードする方法 Category Google Cloud 前の記事を読む 【Google Cloud】CDPを構築して顧客の行動やニーズを把握しませんか? 次の記事を読む 【告知】typeエンジニア転職フェア 出展のお知らせ(2023/7/15) Recommendation オススメ記事 2023年9月5日 Google Cloud 【Google Cloud】Looker Studio × Looker Studio Pro × Looker を徹底比較!機能・選び方を解説 2023年8月24日 Google Cloud 【Google Cloud】Migrate for Anthos and GKEでVMを移行してみた(1:概要編) 2022年10月10日 Google Cloud 【Google Cloud】AlloyDB と Cloud SQL を徹底比較してみた!!(第1回:AlloyDB の概要、性能検証編) BigQuery ML ワークショップ開催のお知らせ 生成AI導入支援パッケージ Discovery AI導入支援パッケージ Google Cloud ホワイトペーパー 新着記事 2026年5月11日 Google Cloud BigQueryの役割はどう変わるのか-Google Cloud Next’26で感じた「AIエージェント時代のデータ基盤」 2026年5月11日 イベント・セミナー 【2026/5/28開催】EC運営を効率化! 生成AIでコンテンツ制作業務を加速させる改善術 2026年5月11日 モバイル Jetpack ComposeとCredential ManagerでPasskeyログインを実装してみた HOME Google Cloud 【Google Cloud】Javaを使ってCloud Storageへフォルダをアップロードする方法