Buduję api punktu końcowego silnika aplikacji, który pobiera obraz od użytkownika (aplikacja dla systemu Android) i zapisuje go programowo w blobstore. Następnie zapisuję przycisk blob_key w moim magazynie danych. Kod wygląda tak:Wyświetlanie obrazu blobstore za pośrednictwem punktów końcowych aplikacji api
Najpierw dostałam obraz poprzez mój
@endpoint.method
jakomessages.BytesField
:image_data = messages.BytesField (1, wymagane = True)
Potem Zapisz do blobstore w ten sposób:
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
Teraz chcę służyć obrazowi plecy. Nie widzę, jak dopasować następujący kod do mojego punktów końcowych API:
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)
w końcu wyobrazić serwującą procedurę takiego:
w @ endpoints.method:
get blob_key z magazynu danych
uzyskać obraz z blob_key
dodać zdjęcie do StuffResponseMessage
wyślij StuffResponseMessage do front-end (Android app)
Moje podejście, ponieważ chcę, aby chronić prywatność swoich użytkowników. Wszelkie przemyślenia na temat tego, jak to zrobić dobrze? My code snippets are generally from the google developer tutorial.
EDIT:
nie widzę jak bym zdać blob_key z magazynu danych w następujący sposób, aby pobrać obraz:
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)
Co znajduje się wewnątrz resource
, tak?
Nie potrzebujesz 'from __future__ import with_statement', jeśli używasz Pythona 2.7. – bossylobster
ah. Dzięki, @bossylobster. Wyciągnąłem to. – learner