8

In App Engine dienen ich cloudstorage Dateien wie ein pdf mit dem Standard-Eimer meiner Anwendung dienen kann:Wie cloudstorage Dateien mit App Engine SDK

http://storage.googleapis.com/<appid>.appspot.com/<file_name> 

Aber wie kann ich lokale cloudstorage Dateien im SDK dienen, ohne einen blob_key zu benutzen?

Ich schreibe wie diese auf die Standardschaufel:

gcs_file_name = '/%s/%s' % (app_identity.get_default_gcs_bucket_name(), file_name) 
with gcs.open(gcs_file_name, 'w') as f: 
    f.write(data) 

Der Namen des Standard Eimers im SDK = 'app_default_bucket'

Im SDK Datenspeicher habe ich eine Art: GsFileInfo Vorführung : Dateiname: /app_default_bucket/example.pdf

Update und Workaround: Sie können eine Bereitstellungs-URL für NON-Bilddateien wie CSS, JS und PDF erhalten.

gs_file = '/gs/%s/%s/%s' % (app_identity.get_default_gcs_bucket_name(), folder, filename) 
serving_url = images.get_serving_url(blobstore.create_gs_key(gs_file)) 
+1

Was meinen Sie mit "lokalen Cloud-Speicherdateien im SDK"? –

+0

Dateien, die in meinem SDK-Standard-Bucket gespeichert wurden. – voscausa

+0

Es gibt keinen SDK-Standard-Bucket. Nur Ihre Anwendung hat einen Standard-Bucket. –

Antwort

8

UPDATE fand ich diese Funktion cloudstorage Dateien mit dem SDK dienen:

This feature has not been documented yet.

http://localhost:8080/_ah/gcs/app_default_bucket/filename 

Diese meands wir die img dienen url brauchen nicht NON Bilder zu dienen, wie weiter unten !! !

Um e dient URL für cloudstorage Dateien wie Bilder, CSS, JS und PDF-Dateien in der default_bucket zu erstellen, verwende ich diesen Code zum Testen (SDK) und GAE Produktion:

WICHTIG: die images.get_serving_url() funktioniert auch für NON images im SDK !!

Im SDK benötigen Sie den Blobstore zum Lesen eines Blobs und zum Erstellen einer Serving-URL für ein Cloudstorage-Objekt.

Ich habe auch den Code zum Lesen, Schreiben und Hochladen von Cloudstorage-Blobs in der SDK- und GAE-Produktion hinzugefügt. Der Code kann here gefunden werden.

+0

Das funktioniert nicht mehr. – AndroidDev

4

Dies ist der Wert, den Sie im Entwicklungsmodus von app_identity_stub.py sehen:

APP_DEFAULT_GCS_BUCKET_NAME = 'app_default_bucket' 

Die Kommentare in dieser Datei erklären:

Dieser Service verhält sich der gleiche als Produktionsservice, mit Ausnahme von Konstantenwerten anstelle von App-spezifischen Werten

Sie sollten die richtige URL in Ihrem Produktionscode erhalten.

EDIT:

Dies ist aus dem Support-Forum:

im Entwicklungsmodus die App Engine-Tools Google Cloud Speicher Dienstleistungen vor Ort zu simulieren. Objekte in dieser simulierten Umgebung sind nicht persistent, sodass Ihre App fehlschlägt, da das gewünschte Objekt nicht im lokalen Speicher vorhanden ist. Wenn Sie das Objekt, das Sie lesen möchten, zuerst erstellen (und optional schreiben), sollte es in dev Modus funktionieren (es tat für mich). Natürlich sind Objekte im Produktionsservice persistent, so dass Sie keinen zusätzlichen Schritt benötigen, wenn Sie Ihre App im Produktionsmodus ausführen (vorausgesetzt, das Objekt existiert bereits).

Hoffnung, das Team

Marc Google Cloud Storage

erste Dies bedeutet, dass Sie schreiben eine Datei hilft, dann können Sie es verwenden. Wenn ich das richtig verstanden habe, können Sie zu diesem Zweck einen Bucket-Namen verwenden, einschließlich 'app_default_bucket'.

+0

Ja, es funktioniert gut in der Produktion. Aber welcher SDK-Link wird verwendet, um eine Datei wie beispiel.pdf im 'app_default_bucket' bereitzustellen. – voscausa

+0

Ich verstehe jetzt. Ich habe meine Antwort aktualisiert. –

+0

Danke für Ihre Hilfe. Aber ich verstehe immer noch nicht, wie man es benutzt. Wie kann die Datei im Entwicklungsmodus bereitgestellt werden? – voscausa

0

Ich war hier früher auf der Suche nach Antworten und wollte nur teilen, was ich gefunden habe, jetzt, wo ich es funktioniert habe.

Sie können dies jetzt tun, und es ist nur ein wenig schmerzhaft. Das Tricksen der Image- oder Blobstore-API wird nicht unterstützt und scheint nicht mehr zu funktionieren.

See:

Wenn Sie Ihre URLs unterschreiben, können Sie automatisch ablaufende Links auf Ihre Inhalte, für anonyme oder paywalled Verbrauch geben. Sie möchten nicht Ihre gesamte Website auf diese Weise bereitstellen, aber für eine PDF oder was auch immer, dies ist eine gültige und halb sichere Option.

In der Dokumentation fehlt möglicherweise die Zeilenschaltung für die erweiterten kanonischen Header. Der Speicherendpunkt sagt Ihnen, was er erwartet, wenn die Signatur fehlerhaft ist.

Außerdem sollte Ihr Gastgeber sein: https://storage-download.googleapis.com/

Wenn Sie App Engine verwenden, dann die GoogleAccessId ist: <Projektname> @ appspot.gserviceaccount.com

See: app_identity.get_service_account_name()

Beispiel für die Generierung der Signatur:

from google.appengine.api import app_identity 


def signFile(path, verb='GET', md5='', contentType='', 
      expiration=''): 
    signatureRequest = '{}\n{}\n{}\n{}\n{}'.format(
     verb, md5, contentType, expiration, path) 

    return app_identity.sign_blob(signatureRequest) 

Das gibt ein Tupel von (privateKey, binarySignature) zurück.

Jetzt müssen Sie die URL erstellen. Die Signatur sollte base64-codiert und dann urlencodiert sein.Im Folgenden wird beschrieben, wie die URL erstellt wird. Sie sollten wahrscheinlich den oben genannten Download-Host verwenden.

Beispiel-URL aus der Dokumentation:

 
https://storage.googleapis. 
com/example-bucket/[email protected] 
ccount.com&Expires=1458238630&Signature=VVUgfqviDCov%2B%2BKnmVOkwBR2olSbId51kSib 
uQeiH8ucGFyOfAVbH5J%2B5V0gDYIioO2dDGH9Fsj6YdwxWv65HE71VEOEsVPuS8CVb%2BVeeIzmEe8z 
7X7o1d%2BcWbPEo4exILQbj3ROM3T2OrkNBU9sbHq0mLbDMhiiQZ3xCaiCQdsrMEdYVvAFggPuPq%2FE 
QyQZmyJK3ty%2Bmr7kAFW16I9pD11jfBSD1XXjKTJzgd%2FMGSde4Va4J1RtHoX7r5i7YR7Mvf%2Fb17 
zlAuGlzVUf%2FzmhLPqtfKinVrcqdlmamMcmLoW8eLG%2B1yYW%2F7tlS2hvqSfCW8eMUUjiHiSWgZLE 
VIG4Lw%3D%3D 

Ich hoffe, das jemand hilft!

Oh yeah, Sie müssen nur alle Signatur-Sachen machen, wenn Ihr Bucket nicht öffentlich zugänglich ist (read-all).

+1

Oder: https://github.com/voscausa/appengine-gcs-signed-url/blob/master/sign_url.py – voscausa

Verwandte Themen