代码之家  ›  专栏  ›  技术社区  ›  markvgti

如何将Firestore数据导出到Google云存储?

  •  0
  • markvgti  · 技术社区  · 7 年前

    Schedule data exports 确实列出了一种按计划从Firestore导出数据的方法,但它是在Node.js上运行的JavaScript:我想避免这种情况&将 更愿意坚持使用全Java解决方案 在服务器端。

    Export and import data 提供了另一种方法-使用 gcloud 具有活动的Internet连接。我正在寻找一个完全基于应用程序引擎(标准)的解决方案,可以作为 cron 工作

    在撰写本文时,似乎还没有一种使用Firebase Admin SDK(版本6.6.0)for Java实现这一点的编程方式。

    1 回复  |  直到 7 年前
        1
  •  1
  •   markvgti    7 年前

    答案在于利用 Firestore REST API 直接地

    在下面的代码中,我使用了谷歌的 HTTP Client Library for Java (无论如何,这应该是您在App Engine(标准)上的默认选择)以进行必要的网络呼叫。

    public static final String DEF_GCS_BUCKET_NAME = PROJECT_ID + ".appspot.com";
    
    public static final String FIRESTORE_API_V1BETA2 =
            "https://firestore.googleapis.com/v1beta2";
    
    public static final String FIRESTORE_DB = "/projects/" + PROJECT_ID
            + "/databases/(default)";
    
    public static final String FIRESTORE_EXPORT_GCS_LOC = "gs://"
            + DEF_GCS_BUCKET_NAME + "/firestore-export/";
    
    public static final String FIRESTORE_EXPORT_GCS_ROOT = "firestore-export/";
    
    private static final String FUNC_EXPORT_DOCUMENTS = ":exportDocuments";
    
    @javax.annotation.CheckForNull
    public static Operation exportCollectionToGcs(@lombok.NonNull String collection)
            throws IOException {
    
        AccessToken token = tokenFor(serviceAc());
        Map<String, Object> payload = new HashMap<>();
        payload.put("collectionIds", Arrays.asList(collection));
        payload.put("outputUriPrefix", FIRESTORE_EXPORT_GCS_LOC + collection);
    
        GenericUrl url = new GenericUrl(FIRESTORE_API_V1BETA2 + FIRESTORE_DATABASE
            + FUNC_EXPORT_DOCUMENTS);
        HttpContent content = new JsonHttpContent(jacksonFactory(), payload);
        HttpRequest req = requestFactory().buildPostRequest(url, content);
        req.getHeaders().setAuthorization("Bearer " + token.getTokenValue())
        Operation op = null;
        try {
            HttpResponse res = req.execute();
            // Parse the response JSON to populate an Operation POJO
        } catch (HttpResponseException e) {
            // Handle the error
        }
        return op;
    }
    

    这开了一家消防商店 Operation 将指定集合导出到GCS。那么你可以 get the status of the Operation 如果你想在事情完成后做些什么(或者只是发送/准备一份报告)。

    确保您使用的服务帐户具有必要的权限(如中所述) Schedule data exports ).