Ich möchte, dass der Benutzer Bilder in Google App Engine hochladen kann. Ich habe folgende (Python):Google App Engine (Python) - Hochladen einer Datei (Bild)
class ImageData(ndb.Model):
name = ndb.StringProperty(indexed=False)
image = ndb.BlobProperty()
Informationen durch den Benutzer übermittelt wird unter Verwendung einer Form (HTML):
<form name = "input" action = "/register" method = "post">
name: <input type = "text" name = "name">
image: <input type = "file" name = "image">
</form>
die dann durch verarbeitet wird:
class AddProduct(webapp2.RequestHandler):
def post(self):
imagedata = ImageData(parent=image_key(image_name))
imagedata.name = self.request.get('name')
imagedata.image = self.request.get('image')
imagedata.put()
jedoch Wenn ich versuche, ein Bild hochzuladen, sagen wir "Book.png", bekomme ich den Fehler: BadValueError: Expected str, got u'Book.png'
Irgendeine Idee was ist los? Ich arbeite seit einiger Zeit mit GAE, aber dies ist das erste Mal, dass ich Blobs verwenden musste.
Ich benutzte diesen Link: https://developers.google.com/appengine/docs/python/images/usingimages , die db, nicht ndb verwendet. Ich habe auch versucht, in einem Variablen Speicher das Bild zunächst wie in dem Link: storedInfo = self.request.get('image')
und dann zu speichern: imagedata.image = ndb.Blob(storedInfo)
Was mir auch einen Fehler gibt: AttributeError: 'module' object has no attribute 'Blob'
Vielen Dank im Voraus.
Der Fehler ist Ihnen zu sagen, dass Sie haben‘ Versuchen Sie, ein Unicode-Objekt als Wert eines Blobs zu setzen, der in diesem Fall der Dateiname zu sein scheint, nicht die Datei selbst. (Ich bin mir nicht sicher, wie t o Holen Sie sich die Rohdaten als str in webapp2, also nur als Kommentar zu schreiben) – geoffspear
einen Grund, warum Sie nicht die Blobstore API als Datenspeicher verwenden? https://developers.google.com/appengine/docs/python/blobstore/#Python_Uploading_a_blob – Faisal
Vielen Dank Woble, aber was würdest du vorschlagen, was ich tue? Und Faisal, ich benutze es nicht, weil es db benötigt (ich benutze ndb) und webapp (ich benutze webapp2). – Albraa