5

Hier ist mein bestehender py-Code für Hochladen von Daten zu Blobstore.Umzug Blobstore zu GCS: Google App Engine Python

from google.appengine.api import files 

def save_data_to_blob_store(data): 
    # Create the file 
    file_name = files.blobstore.create(mime_type='application/octet-stream') 

    # Open the file and write to it 
    with files.open(file_name, 'a') as f: 
     f.write(data) 

    # Finalize the file. Do this before attempting to read it. 
    files.finalize(file_name) 

    # Get the file's blob key 
    blob_key = files.blobstore.get_blob_key(file_name) 
    return str(blob_key) 

Jetzt versuche ich Blobstore & Umzug nach GCS verbitten. Ich habe Code geschrieben, funktioniert aber nicht wie erwartet.

def save_data_to_gcs(request): 
    file_name = '/gs/bucket-name-1/new_file' # change bucket/object names to suit your needs 
    writable_file_name = files.gs.create(file_name, mime_type='application/octet-stream', 
            acl='public-read') 
    with files.open(writable_file_name, 'a') as f: 
     f.write('Hello World!\n') 
     f.write('This is a Google Cloud Storage object!\n') 
    files.finalize(writable_file_name) 

Während dieses Verfahren ausgeführt wird, GAE einen Fehler auf Produktion zu werfen,

Exception in request: 
Traceback (most recent call last): 
    File "/base/data/home/apps/s~bfsolu/248.371810019093562707/common/zip-packages/django-1.1.zip/django/core/handlers/base.py", line 92, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
    File "/base/data/home/apps/s~bfsolu/248.371810019093562707/myapp/utils.py", line 51, in save_data_to_gcs 
    acl='public-read') 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/files/gs.py", line 326, in create 
    return files._create(_GS_FILESYSTEM, filename=filename, params=params) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/files/file.py", line 647, in _create 
    _make_call('Create', request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/files/file.py", line 252, in _make_call 
    _raise_app_error(e) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/files/file.py", line 210, in _raise_app_error 
    raise PermissionDeniedError(e) 
PermissionDeniedError: ApplicationError: 8 

Jeder kann mir helfen, in save_data_to_gcs Verfahren zu korrigieren, würde zu schätzen wissen.

Danke.

+1

Haben Sie GCS aktiviert (Abrechnung aktiviert, usw.)? In Google Cloud Console, nicht geben Sie Ihre App Zugriff auf Ihre Eimer? Um dies zu erreichen, wählen Sie Ihren Eimer, klicken Sie auf ‚Bucket Berechtigungen‘, und fügen Sie neue ‚User‘ Berechtigungen und bietet die App E-Mail-Adresse ([email protected]) und ein Eigentümer zu machen. –

+0

@MarkSimpson: Danke buddy..Its funktioniert wie Charme .. ich einen Gefallen brauche, Wie eindeutige Schlüssel von Dateien Rekord zu bekommen? –

+0

OK, ich habe meinen Kommentar unten in eine Antwort umgewandelt. Bitte akzeptiere es als korrekt. Veröffentlichen Sie diese neue Frage separat. Es hat nichts mit diesem Problem zu tun. Vielen Dank. –

Antwort

4

Sie für GCS activate your project benötigen.

gewähren Sie dann Ihre App die Erlaubnis, Ihre Eimer in Google Cloud Console zu verwenden:

, das zu tun, Ihre Eimer wählen, klicken Sie auf die ‚Bucket Berechtigungen‘ Schaltfläche, und fügen Sie neue ‚User‘ Berechtigungen, die App E-Mail-Adresse angeben ([email protected]) und es zu einem Besitzer machen.

0

Dies funktioniert nicht mehr, da die Datei api im September 2015 heruntergefahren wurde.

Verwandte Themen