Я уже использую облачное хранилище Google в течение нескольких месяцев, и эта проблема внезапно возникла 30 января 2023 года, и я не знаю, почему.
Я настроил учетные данные, используя ключ .json из учетной записи службы облачной платформы IAM Google, и все работает нормально в моей локальной среде. Но когда приложение отправляется в производство в GKE, я получаю сообщение об ошибке
Caused by: java.io.IOException: Error getting access token for service account: Stream is closed, iss: [email protected]
at com.google.auth.oauth2.ServiceAccountCredentials.refreshAccessToken(ServiceAccountCredentials.java:605) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at com.google.auth.oauth2.OAuth2Credentials$1.call(OAuth2Credentials.java:257) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at com.google.auth.oauth2.OAuth2Credentials$1.call(OAuth2Credentials.java:254) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:31) ~[guava-31.0.1-jre.jar!/:na]
at com.google.auth.oauth2.OAuth2Credentials$AsyncRefreshResult.executeIfNew(OAuth2Credentials.java:580) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at com.google.auth.oauth2.OAuth2Credentials.asyncFetch(OAuth2Credentials.java:220) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at com.google.auth.oauth2.OAuth2Credentials.getRequestMetadata(OAuth2Credentials.java:170) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at com.google.auth.oauth2.ServiceAccountCredentials.getRequestMetadata(ServiceAccountCredentials.java:1018) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at com.google.auth.http.HttpCredentialsAdapter.initialize(HttpCredentialsAdapter.java:96) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
at com.google.cloud.http.HttpTransportOptions$1.initialize(HttpTransportOptions.java:159) ~[google-cloud-core-http-2.4.0.jar!/:2.4.0]
at com.google.cloud.http.CensusHttpModule$CensusHttpRequestInitializer.initialize(CensusHttpModule.java:109) ~[google-cloud-core-http-2.4.0.jar!/:2.4.0]
at com.google.api.client.http.HttpRequestFactory.buildRequest(HttpRequestFactory.java:91) ~[google-http-client-1.41.2.jar!/:1.41.2]
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:521) ~[google-api-client-1.33.1.jar!/:1.33.1]
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:455) ~[google-api-client-1.33.1.jar!/:1.33.1]
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:565) ~[google-api-client-1.33.1.jar!/:1.33.1]
at com.google.cloud.storage.spi.v1.HttpStorageRpc.create(HttpStorageRpc.java:311) ~[google-cloud-storage-2.4.4.jar!/:2.4.4]
at com.google.cloud.storage.StorageImpl.lambda$internalCreate$2(StorageImpl.java:198) ~[google-cloud-storage-2.4.4.jar!/:2.4.4]
при загрузке изображения в облачное хранилище Google
Я понятия не имею, почему и как решить эту проблему, я пробовал так много разных способов, например, изменить ключ учетной записи службы json, попытаться изменить кластер и другим способом. но до сих пор не могу решить эту проблему
Credentials credentials = GoogleCredentials.fromStream(new ByteArrayInputStream(Base64.getDecoder().decode(base64Credentials)))
.createScoped(Collections.singletonList(StorageScopes.DEVSTORAGE_FULL_CONTROL));
return StorageOptions.newBuilder().setCredentials(credentials)
.setTransportOptions(HttpTransportOptions.newBuilder().
setConnectTimeout(300000)
.build())
.setProjectId(projectId).build().getService();
а вот код для загрузки в облачное хранилище Google
storage.create(BlobInfo
.newBuilder(cloudStorageProperties.getBucketName(), filename)
.setAcl(listAcl)
.setContentType(FileUtils.getMimeType(extension))
.build(), content);
и вот библиотека Google, которую я использовал для идентификатора своего градиента
implementation platform('com.google.cloud:libraries-bom:24.4.0')
implementation 'com.google.cloud:google-cloud-storage'
Я пытаюсь решить проблему с загрузкой изображения в облачное хранилище Google с помощью клиентской библиотеки Google, поэтому я надеюсь, что мое приложение может работать как обычно, может загружать изображение в облачное хранилище Google.
После нескольких попыток, наконец, я могу решить эту проблему, используя причал вместо нетти.