0

我有一个在 GAE 中运行的 Scala Web 应用程序。我需要使用 Java 库 - JWI - 这需要我将 Wordnet 的根文件夹传递给edu.mit.jwi.Dictionary的构造函数。

我曾想过将所有 Wordnet 的东西都放到 Google Cloud Storage 中,但它根本没有文件夹的概念。所以,我的问题是:有什么方法可以用 Google Cloud Storage 做我想做的事,还是应该使用其他任何东西?

4

2 回答 2

1

当您说“Google Cloud Java 库中没有用于文件夹操作的 API”时,您是对的。截至今天,Java 客户端库没有文件夹操作。你可以在这里查看图书馆

于 2018-06-04T13:11:46.803 回答
0

即使 gsutil 以不同的方式处理子目录,您也可以使用 Google Cloud Storage (GCS) ,因为它的行为类似于常规文件夹并使用相同的表示法。

我不确定您的应用程序是如何工作的,但如果我猜对了:

  • 将 JWI 库加载到 Cloud Shell。
  • 在 App Engine flexible 的 Scala 应用程序中导入库。在此处查找有关如何使用 Scala 调用 Java 类的示例。
  • 部署应用程序。按照前面的步骤,部署的映像将包含您需要的 JWI 库。
  • 使用Google Cloud Storage API的Java 客户端库将 Wordnet 语义词典加载到存储桶中并传递 Wordnet 的根文件夹,在本例中为 GCS 文件夹。“字典”必须在您使用时下载(使用 get 函数)并存储在本地。

在此处查找 Cloud Storage 的 Java 客户端库文档。您可能需要比我为您编写的以下功能更多的功能,以创建存储桶、上传文件并下载它。

package com.example.storage;

// Imports the Google Cloud client library
import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Acl.Role;
import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

public class QuickstartSample {
  public static void main(String... args) throws Exception {
    // Instantiates a client
    Storage storage = StorageOptions.getDefaultInstance().getService();

    // The name for the new bucket
    String bucketName = args[0];  // "my-new-bucket";

    // Creates the new bucket
    Bucket bucket = storage.create(BucketInfo.of(bucketName));

    System.out.printf("Bucket %s created.%n", bucket.getName());


    // [START uploadFile]

    // Object name
    String fileName="filename.ext";

    // Create file inside the bucket
    BlobInfo blobInfo =
        storage.create(
            BlobInfo
                .newBuilder(bucketName, fileName)
                // Modify access list to allow all users with link to read file
                .setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
                .build()
                // other options required
                );
    // return the public download link
    blobInfo.getMediaLink();

    // [END uploadFile]


    // Copy file from a bucket
    String blobName = "filename.ext";
    BlobId blobId = BlobId.of(bucketName, blobName);
    Blob blob = storage.get(blobId);
  }

最后,在这里找到如何编译代码并运行它:

mvn clean package -DskipTests

mvn exec:java -Dexec.mainClass=com.example.storage.QuickstartSample -Dexec.args="bucketName"

于 2018-05-28T16:06:48.133 回答