2015-04-13 9 views

risposta

20

scopre che non è necessario per eseguire qualsiasi configurazione. Ho appena pensato che ce ne fosse uno con un nome particolare durante il caricamento usando il blobstore e uno è stato creato automaticamente per me.

Per inciso, non sembra essere documentato da nessuna parte come è possibile sfogliare i file nella memoria del server di sviluppo. Puoi farlo selezionando l'entità __GsFileInfo__ nell'accesso di amministratore di Datastore Viewer al tuo server di sviluppo locale.

4

È necessario scaricare e integrare lo Google Cloud Storage Client Library per App Engine.

Questa libreria vi dà la GcsService che è simile alla BlobstoreService, in modo da poter scrivere un file, leggere un file, cancellare un file e altre funzioni fornite da Cloud Storage

Quando si utilizza il codice l'ambiente di sviluppo, i file caricati vengono memorizzati nella cartella e un'entità __GsFileInfo__ viene creato nel datastore locale che conserva i metadati allegato al file

Questa libreria funziona anche online, in modo che il codice funzionerà sia per lo sviluppo e la ambienti di produzione.

Qui potete trovare il Getting Started guida e la piena JavaDoc di riferimento

+0

Non penso che sia necessario ottenere la libreria client. È necessario farlo solo se, beh, è ​​necessario accedere al negozio attraverso le funzioni della libreria. Sto scrivendo al negozio usando il blobstore, quindi non ho bisogno della libreria client. Sembra che impostare i bucket avvenga automaticamente quando li si utilizza, quindi non è necessaria alcuna installazione. Vedi la mia risposta. – user2771609

7

Per coloro che cercano di ottenere Google Cloud Storage per lavorare a tutti dal loro server di sviluppo Java di app locali, ho pensato una risposta più sarebbe utile. Sono riuscito a far funzionare il mio app server di sviluppo locale con Google Cloud Storage non locale, ma sto solo scavando nel codice e capendo cosa era necessario: non sembra esserci documentazione su questo.

L'obiettivo sarà quello di ottenere questo blocco di codice a lavorare a livello locale, che legge un file da 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(); 

Se si tenta di farlo a livello locale, non troverete tutti i file che avete caricare su GCS, perché tenterà di utilizzare un GCS falso locale. Sfortunatamente, non ho trovato un buon modo per caricare su questo GCS locale, quindi non è molto utile (non esiste un file explorer per questo come nella versione cloud, e gsutil non funziona per questo). Quindi, invece, lo faremo funzionare con GCS non locali (cloud) durante l'esecuzione nel server dell'app locale di sviluppo.

Per fare ciò, si noti che GcsService creato in com.google.appengine.tools.cloudstorage.GcsServiceFactory da questo blocco di codice:

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

dice che è necessario specificare un token di accesso personalizzato fornitore per ottenere il servizio non locale, cosa che si fa definendo una proprietà di sistema. Per un app App Engine, è possibile farlo in AppEngine-web.xml in questo modo:

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

Il valore di tale proprietà è una classe si definisce che implementa com.google.appengine.tools.cloudstorage.oauth.AccessTokenProvider, che fornisce il token di accesso per la tua app. Questa classe deve creare un GoogleCredential, che può essere utilizzato per recuperare un token di accesso, utilizzando le istruzioni per "Altro" per un GoogleCredential su https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests.

Ora creerà un servizio Gcs OAuth che comunica con il cloud e non è necessario utilizzare la memoria locale falsa.