Как включить облачное хранилище Google на локальном сервере разработки?

Я хочу использовать ведро GCS в качестве основы для моего blobstore, но я не могу понять, как настроить его на моем сервере разработки.

Есть инструкции для этого, используя консоль разработчиков на реальном сервере, но я не могу найти ничего о том, как это сделать на моей локальной машине разработки...

Ответ 1

Оказывается, вам вообще не нужно выполнять какие-либо настройки. Я просто предположил, что при загрузке с использованием blobstore есть один с определенным именем, а один был создан для меня автоматически.

Кстати, похоже, что нигде не документировано, как вы можете просматривать файлы в хранилище сервера разработки. Вы можете сделать это, выбрав объект __GsFileInfo__ в доступе администратора Datastore Viewer к вашему локальному серверу dev.

Ответ 2

Для тех, кто пытается заставить Google Cloud Storage работать вообще со своего локального сервера приложений разработки Java, я подумал, что будет полезен еще один ответ. Мне удалось получить локальный сервер приложений Dev, работающий с нелокальным облачным хранилищем Google, но только копайте код и выясняйте, что нужно - там не будет документации по этому вопросу.

Цель состоит в том, чтобы заставить этот блок кода работать локально, который читает файл из GCS:

    GcsService gcsService =
       GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
    int fileSize = (int) gcsService.getMetadata(gcsFilename).getLength();
    ByteBuffer byteBuffer = ByteBuffer.allocate(fileSize);
    GcsInputChannel inputChannel = gcsService.openReadChannel(gcsFilename, 0);
    int readResult = inputChannel.read(byteBuffer);
    byte[] fileBytes = byteBuffer.array();

Если вы попытаетесь сделать это локально, вы не найдете файлы, которые вы загрузили в GCS, потому что он будет пытаться использовать поддельные локальные GCS. К сожалению, я не нашел хороший способ загрузить этот локальный GCS, так что это не очень полезно (для него нет проводника файлов, как в облачной версии, а gsutil для него не работает). Поэтому вместо этого мы собираемся заставить его работать с нелокальным (облачным) GCS при запуске на локальном сервере приложений Dev.

Чтобы сделать это, обратите внимание, что GcsService создается в com.google.appengine.tools.cloudstorage.GcsServiceFactory этим блоком кода:

if (location == SystemProperty.Environment.Value.Production || hasCustomAccessTokenProvider()) {
  rawGcsService = OauthRawGcsServiceFactory.createOauthRawGcsService(builder.build());
} else if (location == SystemProperty.Environment.Value.Development) {
  rawGcsService = LocalRawGcsServiceFactory.createLocalRawGcsService();

Выше сказано, что вам нужно указать поставщика доступа к токену для получения нелокальной службы, что вы делаете, определяя системное свойство. Для приложения с движком приложения вы можете сделать это в appengine-web.xml следующим образом:

<system-properties>
    <property name="gcs_access_token_provider" value="com.mypackage.MyAccessTokenProvider" />
</system-properties>

Это значение этого свойства - это класс, который вы определяете, который реализует com.google.appengine.tools.cloudstorage.oauth.AccessTokenProvider, который предоставляет токен доступа для вашего приложения. Этот класс должен создать GoogleCredential, который можно использовать для получения токена доступа, используя инструкции для "Другое" для GoogleCredential в https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests.

Теперь он создаст OAuth GcsService, который будет разговаривать с облаком, и вам не нужно использовать поддельное локальное хранилище.

Ответ 3

Вам нужно загрузить и интегрировать Клиентскую библиотеку Google Cloud Storage для App Engine.

Эта библиотека предоставляет вам GcsService, который похож на BlobstoreService, поэтому вы можете писать файл, читать файл, удалять файл и другие функции, предоставляемые из облачного хранилища

Когда вы используете код в среде разработки, загруженные файлы хранятся в папке appengine-generated, а в локальном хранилище данных создается объект __GsFileInfo__, который сохраняет метаданные, прикрепленные к файлу

Эта библиотека также работает в Интернете, поэтому ваш код будет работать как для среды разработки, так и для производства.

Здесь вы можете найти руководство Начало работы и полное JavaDoc ссылка