Чтение папки wordnet в облачном приложении Google
У меня есть веб-приложение Scala, работающее в GAE. Мне нужно использовать библиотеку Java - JWI- которая требует от меня передать корневую папку Wordnet в edu.mit.jwi.Dictionary
конструктор.
Я думал о том, чтобы поместить все материалы Wordnet в Google Cloud Storage, но в нем вообще нет концепции папки. Итак, мой вопрос: есть ли способ сделать то, что я хочу, с Google Cloud Storage или я должен использовать что-нибудь еще?
2 ответа
Вы были правы, когда заявили, что "в Java-библиотеке Google Cloud API нет API для работы с папками". На сегодняшний день нет манипуляций с папками для клиентской библиотеки java. Вы можете проверить библиотеку здесь
Вы можете использовать Google Cloud Storage (GCS), даже если gsutil обрабатывает подкаталоги по- другому, потому что он ведет себя как обычная папка и использует те же обозначения.
Я не уверен в том, как работает ваше приложение, но хорошо ли я догадываюсь:
- Загрузите библиотеку JWI в облачную оболочку.
- Импортируйте библиотеку в своем приложении Scala в App Engine Flexible. Здесь вы найдете пример того, как вызывать класс Java с помощью Scala.
- Разверните приложение. Следуя предыдущим шагам, развернутый образ будет содержать нужную вам библиотеку JWI.
- Загрузите семантический словарь Wordnet в корзину и передайте корневую папку Wordnet, в данном случае папку GCS, используя клиентскую библиотеку Java для API Google Cloud Storage. "Словарь" должен быть загружен (используя функцию get) и сохранен локально, пока вы его используете.
Найдите здесь документацию по клиентской библиотеке 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"