5

Ho bisogno di recuperare i file nella mia applicazione Web che hanno una dimensione superiore a 64 KB. Al momento, in v1beta1 dell'API JSON, Google consente solo caricamenti/download di 64 KB di dimensioni tramite la loro API JSON. Ho capito come caricare file di dimensioni superiori a 64 KB utilizzando un caricamento "ripristinabile" (non tramite l'interfaccia che v1beta1 fornisce nella sua API JSON, ma manualmente).Come recuperare file di dimensioni superiori a 64 KB con l'API JSON di Cloud Storage?

Quello che non riesco a capire è un buon modo per scaricare. In questo momento, faccio l'ACL pubblico per l'oggetto che voglio scaricare, scaricare il file e quindi rimuovere l'ACL pubblico sull'oggetto. Questo non è solo inefficiente, non è molto pulito. C'è un metodo migliore che potrei usare o sono bloccato finché Google non fornisce un mezzo migliore in una versione futura della loro API?

Informazioni di background Sto scrivendo un'applicazione GAE e conosco l'interfaccia google.appengine.api.files. Sfortunatamente questo non funziona su live bucket durante l'utilizzo dell'ambiente di sviluppo locale e, a scopo di test, il mio team e io abbiamo bisogno di un modo per testare lo sviluppo localmente (troppo complicato da implementare in GAE tra gli altri fattori limitanti/di sicurezza). Possiamo interagire con tutte le altre API ad eccezione di Cloud Storage, quindi sto scrivendo una classe che userà l'interfaccia JSON API o l'interfaccia di AppEngine durante la lettura/scrittura/eliminazione da Cloud Storage. Ho ottenuto un'implementazione funzionante, ma non sono soddisfatto del modo in cui recupero i file.

Precisazione commento qui sotto: Stiamo scaricando grandi quantità di informazioni, massaggiandolo, e la memorizzazione in Cloud Storage per il consumo in BigQuery. Abbiamo bisogno di utilizzare i live bucket dall'ambiente dev perché, se non lo facciamo, BigQuery non sarà in grado di consumare i dati che vogliamo testare. Non c'è bisogno di servire questi file, semplicemente elaborarli

soluzione da commento alla risposta accettato di seguito: sono stato in grado di riutilizzare il mio autenticato oggetto dal mio codice che interagisce con l'API JSON per fare una richiesta GET autenticata contro l'endpoint URL https://{bucket_name}.storage.googleapis.com/{object_name}, aggiungendo solo le intestazioni Content-Length: 0 e x-goog-api-version: 2.

+0

Non è chiaro dalla domanda se si sta utilizzando GAE o no? Se è così, ci sono alcune alternative che dipendono dal tuo caso d'uso. –

+0

Mi scuso, ho aggiunto alcune informazioni di base – someone1

+0

Qual è il tuo caso d'uso? Hai bisogno di servire i file o leggerli e processarli? Inoltre, perché dovresti voler accedere ai live bucket dal tuo ambiente di sviluppo? –

risposta

1

Per i download, l'API XML è il modo più semplice per eseguire un download autenticato. Esistono diversi modi per eseguire download autenticati, come descritto in questa pagina: https://developers.google.com/storage/docs/authentication

Per una semplice operazione di recupero, il nome "XML API" può essere considerato fuorviante - non è necessario produrre alcun XML. Se si verifica un errore, verrà rappresentato come XML, ma nel caso più semplice di un download di file riuscito, non è coinvolto alcun XML.

+0

Sarebbe la mia preferenza utilizzare l'API JSON. Lo uso per comunicare con un numero di altre API di Google, quindi molto codice è già scritto e facilmente trasportabile per interagire con esso. C'è anche una libreria incorporata che si autentica su Google per me (AppAssertionCredentials) in produzione. Creare e gestire un modo GAE di comunicare con l'API XML sarebbe alquanto complicato. – someone1

+0

Abbastanza giusto. Lasciatemi fare una piccola ricerca. – Benson

+0

Idealmente mi piacerebbe che funzionasse come l'API di Drive. Quando ottengo un elenco di file o di un file specifico, ottengo downloadURLs/ExportLink che posso effettuare chiamate GET autenticate per scaricare la risorsa. Ho già un token oauth2 ... forse posso riutilizzare quel token con l'API XML e fare il ping di un gateway con le informazioni di bucket/object per prendere i dati .... Può aver trovato la mia risposta: https: // developers .google.com/storage/docs/reference-methods # getobject – someone1

Problemi correlati