Google 翻译 API V3:如何从文件流中验证服务帐户
Google translate API V3: How to authenticate service account from file stream
使用 Google Translate V3 API 验证服务帐户的默认方式是通过环境变量。这个名为 GOOGLE_APPLICATION_CREDENTIALS 的环境变量指向带有凭据的 json 文件,如下所述:
https://cloud.google.com/docs/authentication/production
但是,在不同位置使用文件时如何使用所需的凭据?正如 google 文档中所述,我可以从 FileStream 创建凭证对象。但是,使用此凭据对象仅记录在 google 云存储中。 TranslateTextRequest 的生成器不接受此类凭据对象。
https://googleapis.dev/dotnet/Google.Cloud.Translate.V3/2.0.0/api/Google.Cloud.Translate.V3.TranslateTextRequest.html
唯一的解决方法是将文件复制到环境变量中指定的位置,但这看起来很奇怪,并且在未设置该变量时会失败。
所以,我终于解决了这个问题。
@JohnHanley 不幸的是,class TranslationServiceClientBuilder
在我的环境中不可用。也许它是特定于 DotNet 的。然而,这个提示还是很有用的,因为我发现了另一个创建 TranslationServiceSettings
实例的 Builder,它又拥有一个静态工厂方法,它又可以用来实例化一个 TranslationServiceClient
。
以下是关于如何从 Google JSON 凭据文件的文件路径创建 TranslationServiceClient 的完整解决方案。
TranslationServiceSettings settings = TranslationServiceSettings.newBuilder()
.setCredentialsProvider(new CredentialsProvider() {
@Override
public Credentials getCredentials() throws IOException {
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(credentialsFileAbsPath))
.createScoped(Collections.singletonList("https://www.googleapis.com/auth/cloud-platform"));
return credentials;
}
}).build();
TranslationServiceClient translationServiceClient = TranslationServiceClient.create(settings);
当然,匿名 class 也可以用 Lambda 表达式代替。
@PjotrS 很抱歉造成混淆。我指的是 JSON 凭据文件,而不是要翻译的文件。
使用 Google Translate V3 API 验证服务帐户的默认方式是通过环境变量。这个名为 GOOGLE_APPLICATION_CREDENTIALS 的环境变量指向带有凭据的 json 文件,如下所述: https://cloud.google.com/docs/authentication/production
但是,在不同位置使用文件时如何使用所需的凭据?正如 google 文档中所述,我可以从 FileStream 创建凭证对象。但是,使用此凭据对象仅记录在 google 云存储中。 TranslateTextRequest 的生成器不接受此类凭据对象。 https://googleapis.dev/dotnet/Google.Cloud.Translate.V3/2.0.0/api/Google.Cloud.Translate.V3.TranslateTextRequest.html
唯一的解决方法是将文件复制到环境变量中指定的位置,但这看起来很奇怪,并且在未设置该变量时会失败。
所以,我终于解决了这个问题。
@JohnHanley 不幸的是,class TranslationServiceClientBuilder
在我的环境中不可用。也许它是特定于 DotNet 的。然而,这个提示还是很有用的,因为我发现了另一个创建 TranslationServiceSettings
实例的 Builder,它又拥有一个静态工厂方法,它又可以用来实例化一个 TranslationServiceClient
。
以下是关于如何从 Google JSON 凭据文件的文件路径创建 TranslationServiceClient 的完整解决方案。
TranslationServiceSettings settings = TranslationServiceSettings.newBuilder()
.setCredentialsProvider(new CredentialsProvider() {
@Override
public Credentials getCredentials() throws IOException {
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(credentialsFileAbsPath))
.createScoped(Collections.singletonList("https://www.googleapis.com/auth/cloud-platform"));
return credentials;
}
}).build();
TranslationServiceClient translationServiceClient = TranslationServiceClient.create(settings);
当然,匿名 class 也可以用 Lambda 表达式代替。
@PjotrS 很抱歉造成混淆。我指的是 JSON 凭据文件,而不是要翻译的文件。