Für diejenigen, die versuchen Google Cloud Storage zu bekommen überhaupt von ihrem lokalen Java-Entwicklung App-Server zu arbeiten, dachte ich noch eine Antwort hilfreich wäre. Es gelang mir, meinen lokalen Dev-App-Server mit nicht-lokalem Google Cloud Storage zu arbeiten, aber ich musste nur den Code durchforsten und herausfinden, was benötigt wurde - es scheint keine Dokumentation darüber zu geben.
Ziel wird es sein, diesen Code-Block zu erhalten lokal zu arbeiten, die eine Datei von GCS liest:
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();
Wenn Sie versuchen, dies vor Ort zu tun, werden Sie keine Dateien finden, Sie haben Upload zu GCS, da versucht wird, ein gefälschtes lokales GCS zu verwenden. Leider habe ich keinen guten Weg gefunden, um dieses lokale GCS hochzuladen, also ist das nicht sehr nützlich (es gibt keinen Datei-Explorer dafür wie in der Cloud-Version, und gsutil funktioniert nicht dafür). Stattdessen werden wir es mit nicht-lokalen (Cloud-) GCS verwenden, wenn es auf dem lokalen Dev-App-Server ausgeführt wird.
, das zu tun, dass GcsService beachten Sie in com.google.appengine.tools.cloudstorage.GcsServiceFactory von diesem Codeblock erstellt wird:
if (location == SystemProperty.Environment.Value.Production || hasCustomAccessTokenProvider()) {
rawGcsService = OauthRawGcsServiceFactory.createOauthRawGcsService(builder.build());
} else if (location == SystemProperty.Environment.Value.Development) {
rawGcsService = LocalRawGcsServiceFactory.createLocalRawGcsService();
Die oben
sagt, dass Sie einen benutzerdefinierten Zugriffstoken angeben müssen Anbieter, um den nicht-lokalen Dienst zu erhalten, den Sie tun, indem Sie eine Systemeigenschaft definieren. Für eine App Engine-App können Sie, dass in appengine-web.xml wie folgt tun:
<system-properties>
<property name="gcs_access_token_provider" value="com.mypackage.MyAccessTokenProvider" />
</system-properties>
Dieser Wert dieser Eigenschaft ist eine Klasse, die Sie definieren, dass implementiert com.google.appengine.tools.cloudstorage.oauth.AccessTokenProvider, der das Zugriffstoken für Ihre App bereitstellt. Diese Klasse muss ein GoogleCredential erstellen, das zum Abrufen eines Zugriffstokens verwendet werden kann, indem Sie die Anweisungen für "Andere" für ein GoogleCredential unter https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests verwenden.
Jetzt wird ein OAuth-GcsService erstellt, der mit der Cloud kommuniziert und Sie müssen den gefälschten lokalen Speicher nicht verwenden.
Ich glaube nicht, dass Sie die Client-Bibliothek benötigen. Sie müssen das nur tun, wenn Sie über die Bibliotheksfunktionen auf den Speicher zugreifen müssen. Ich schreibe mit dem Blobstore in den Laden, also brauche ich die Client-Bibliothek nicht. Es scheint, als würde die Einrichtung der Buckets automatisch erfolgen, wenn Sie sie verwenden. Daher ist überhaupt keine Einrichtung erforderlich. Siehe meine Antwort. – user2771609