Blobstore-Image über App-Engine-Endpunkte-API bereitstellen

Ich erstelle eine App-Engine-Endpunkt-API, die Bilder von einem Benutzer (Android-App) aufnimmt und programmgesteuert im Blobstore speichert. Dann speichere ich den blob_key in meinem Datenspeicher. Der Code sieht folgendermaßen aus:

Zuerst erhielt ich das Bild durch meine@endpoint.method Als einmessages.BytesField:

image_data = messages.BytesField (1, erforderlich = True)

Dann speichere ich im Blobstore wie folgt:

from google.appengine.api import files

def save_image(data):
  # Create the file
  file_name = files.blobstore.create(mime_type='image/png')

  # 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 blob_key # which is then saved to datastore

Jetzt möchte ich das Bild zurückgeben. Ich kann den folgenden Code nicht in meine Endpunkt-API einfügen:

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource)
    self.send_blob(blob_info)

Am Ende stelle ich mir eine Servierprozedur wie diese vor:

in @ endpoints.method:

Holen Sie sich blob_key vom Datenspeicher

Bild mit blob_key erhalten

Bild zu StuffResponseMessage hinzufügen

StuffResponseMessage an Front-End senden (Android App)

Mein Ansatz ist, weil ich die Privatsphäre meiner Benutzer schützen möchte. Irgendwelche Gedanken darüber, wie man das gut macht?Meine Code-Schnipsel stammen in der Regel aus dem Google Developer Tutorial.

BEARBEITEN:

Ich sehe nicht, wie ich den blob_key vom Datenspeicher an die folgende Methode übergeben würde, um das Bild abzurufen:

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource)
    self.send_blob(blob_info)

Was ist drinresource, sowieso?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage