每个API的Firestore导入/导出

问题描述 投票:0回答:1

我正在寻找一种从java代码以编程方式调用firestore import/export功能的方法。

到目前为止我发现的是,好的firestore client library还不支持导入/导出调用。但是更低级别的rest/grpc api已经支持他们了。使用java library我尝试了以下内容:

Firestore firestoreApi = new Firestore
    .Builder(UrlFetchTransport.getDefaultInstance(), new GsonFactory(), null)
    .setApplicationName(SystemProperty.applicationId.get())
    .build();

GoogleFirestoreAdminV1beta2ImportDocumentsRequest importRequest = new GoogleFirestoreAdminV1beta2ImportDocumentsRequest();
importRequest.setInputUriPrefix(String.format("gs://{}/{}/", BUCKET, image));

GoogleLongrunningOperation operation = firestoreApi
    .projects()
    .databases()
    .importDocuments("projects/" + SystemProperty.applicationId.get() + "/databases/(default)", importRequest)
    .execute();

在app引擎中运行时,遗憾地以缺少权限结束:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401
{
  "code": 401,
  "errors": [
    {
      "domain": "global",
      "location": "Authorization",
      "locationType": "header",
      "message": "Login Required.",
      "reason": "required"
    }
  ],
  "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
  "status": "UNAUTHENTICATED"

我无法让official way登录工作,因为firestore构建器没有接受AppEngineCredentials实例的方法。

我已经检查了python客户端库,它似乎也不支持这些方法(尚未)。有没有人知道我如何使用旧的rest api登录或获得支持这些方法的客户端库(某些语言在app引擎上运行请:))

谢谢阅读!卡斯滕

java firebase google-app-engine google-cloud-firestore google-client-login
1个回答
1
投票

您可以将此Cloud Datastore example用于Cloud Firestore。了解他们如何获得访问令牌:

import com.google.appengine.api.appidentity.AppIdentityService;
import com.google.appengine.api.appidentity.AppIdentityServiceFactory;

// Get an access token to authorize export request
      ArrayList<String> scopes = new ArrayList<String>();
      scopes.add("https://www.googleapis.com/auth/datastore");
      final AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
      final AppIdentityService.GetAccessTokenResult accessToken =
          AppIdentityServiceFactory.getAppIdentityService().getAccessToken(scopes);
      connection.addRequestProperty("Authorization", "Bearer " + accessToken.getAccessToken());
© www.soinside.com 2019 - 2024. All rights reserved.