0

Ich versuche, ein Blob aus einer Bild-URL zu erstellen, aber ich kann nicht herausfinden, wie das geht.Erstellen Blob von URL in Gae mit Python

Ich habe gelesen, bereits in der Dokumentation von Google über Blob zu schaffen, aber es spricht nur über Blob von einem Formular Erstellen und Verwenden von blobstore.create_upload_url('/upload_photo'). ich einige Fragen über dort zu lesen, aber ich habe nichts gefunden, das mir helfen könnte.

Meine App hat eine Liste von Bild URL und ich möchte diese Bilder in den Blobstore speichern, damit ich sie später dienen kann. Ich denke, dass Blobstore die Lösung ist, aber wenn es einen besseren Weg gibt, bitte sag es mir!

EDIT Ich versuche, Google Cloud Storage zu nutzen:

class Upload(webapp2.RequestHandler): 
    def get(self): 
     self.response.write('Upload blob from url') 
     url = 'https://500px.com/photo/163151085/evening-light-by-jack-resci' 
     url_preview = 'https://drscdn.500px.org/photo/163151085/q%3D50_w%3D140_h%3D140/d3b8d92296f9381a91f6d41b1c607c92?v=3' 
     result = urlfetch.fetch(url_preview) 
     if result.status_code == 200: 
      doSomethingWithResult(result.content) 
     self.response.write(url_preview) 


def doSomethingWithResult(content): 
    gcs_file_name = '/%s/%s' % ('provajack-1993', 'prova.jpg') 
    content_type = mimetypes.guess_type('prova.jpg')[0] 

    with cloudstorage.open(gcs_file_name, 'w', content_type=content_type, options={b'x-goog-acl': b'public-read'}) as f: 
     f.write(content) 

    return images.get_serving_url(blobstore.create_gs_key('/gs' + gcs_file_name)) 

(in Stackoverflow gefunden), aber dieser Code geben Sie mir eine Fehlermeldung:

*File "/base/data/home/apps/e~places-1993/1.394547465865256081/main.py", line 54, in doSomethingWithResult 
    with cloudstorage.open(gcs_file_name, 'w', content_type=content_type, options={b'x-goog-acl': b'public-read'}) as f: 
AttributeError: 'module' object has no attribute 'open'* 

Ich kann nicht verstehen Warum. Ich muss etwas im Cloud-Speicher einstellen?

+0

Warum Sie versuchen, Speicher Google Cloud nicht statt Blobstore? –

+0

Laden Sie die Datei herunter und lesen Sie sie, indem Sie die urlfetch-Klasse von gae verwenden, und erstellen Sie anschließend eine neue Datei in gcs bucket. Geben Sie dem gcs-Bucket die entsprechenden Berechtigungen, um die Bucket-Objekte für alle verfügbar zu machen. Dann generieren Sie eine gcs-Objekt-Serving-URL, geben Sie diese URL an alle Ihre Benutzer. –

+0

Danke für den Rat. Ich habe meine Antwort bearbeitet, weil es nicht funktioniert! Kannst du mir helfen? –

Antwort

0

Die cloudstorage.open() ist eindeutig vorhanden, daher weist der Fehler wahrscheinlich auf einen Bibliotheks-/Namenskonflikt in Ihrer Umgebung hin.

Verfahren für einen solchen Konflikt Debuggen wird in diesem Beitrag beschrieben: google-cloud-sdk - Fatal errors on both update and attempted reinstall Mac OSX 10.7.5

+0

Danke für die Antwort. Ich versuche, Google Cloud-Speicher zu verwenden, aber ich habe ein Problem, wenn ich die Methode öffnen (wie ich in meiner Frage bearbeitet) –