1

「google-api-services-storage-v1beta2-rev5-java-1.15.0-rc.zip」Google Cloud Storage ライブラリを、こちらの「StorageSample.java」サンプル プログラムと一緒に使用しています。

サンプルプログラムのセットアップ手順に従い、「client_secrets.json」および「sample_settings.json」ファイルをセットアップしました。サンプル プログラムは正常にコンパイルされますが、部分的にのみ正常に実行されます。

「StorageSample.java」プログラムの「uploadObject」メソッドを変更して、(ランダムに生成されたファイルをアップロードするのではなく) 自分で作成したテスト ファイルをアップロードするようにしました。プログラムは次の方法で正常に実行されます。

tryCreateBucket();
getBucket();
listObjects();
getObjectMetadata();

ただし、「uploadObject(true)」メソッドを実行すると、次のエラーが発生します

================== Uploading object. ==================

Forbidden

変更した「uploadObject」メソッドを以下に示します。

private static void uploadObject(boolean useCustomMetadata) throws IOException {
  View.header1("Uploading object.");
  File file = new File("My_test_upload_file.txt");
  if (!file.exists() || !file.isFile()) {
      System.out.println("File does not exist");
      System.exit(1);
  }
  InputStream inputStream = new FileInputStream(file);
  long byteCount = file.length();
  InputStreamContent mediaContent = new InputStreamContent("application/octet-stream", inputStream);
  mediaContent.setLength(byteCount);
  StorageObject objectMetadata = null;
  if (useCustomMetadata) {
      List<ObjectAccessControl> acl = Lists.newArrayList();  // empty acl (seems default acl).
      objectMetadata = new StorageObject()
             .setName("myobject")
             .setMetadata(ImmutableMap.of("key1", "value1", "key2", "value2"))
             .setAcl(acl)
             .setContentDisposition("attachment");        
  }
  Storage.Objects.Insert insertObject = storage.objects().insert("mybucket", objectMetadata, mediaContent);
  if (!useCustomMetadata) {
    insertObject.setName("myobject");
  }
  if (mediaContent.getLength() > 0 && mediaContent.getLength() <= 2 * 1000 * 1000 /* 2MB */) {
    insertObject.getMediaHttpUploader().setDirectUploadEnabled(true);
  }
  insertObject.execute();
}

プログラムの 1 回目の実行で、バケットが作成され、作成したテスト ファイルをアップロードするときに「禁止」エラーが発生します。その後の実行では、「禁止」エラーが持続します。

バケットはプログラムによって作成されるため、プログラムにはそのバケットにファイルをアップロードするのに十分なアクセス権が必要だと思います。

見逃したセットアップ/操作はありますか? 提案をありがとう。

4

1 に答える 1