Base64 kodiert binäre hochgeladene Daten auf der AppEngine

Ich habe versucht, Base64 zu codieren Bilddaten aus dem Benutzer (in diesem Fall ein vertrauenswürdiger Admin), um so viele Anrufe an den BlobStore zu überspringen, wie ich vielleicht kann. Jedes Mal, wenn ich versuche, es zu codieren, empfange ich einen Fehler, der sagt:

Error uploading image: 'ascii' codec can't decode byte 0x89 in position 0: ordinal not in range(128) 

Ich habe den Fehler gegoogelt (die weniger signifikanten Teile) und festgestellt, dass es etwas mit Unicode (?) Zu tun haben kann. Der Vorlagenabschnitt ist nur ein Grund-Upload-Formular, während der Handler den folgenden Code enthält:

  def post(self,id): logging.info("ImagestoreHandler#post %s", self.request.path) fileupload = self.request.POST.get("file",None) if fileupload is None : return self.error(400) content_type = fileupload.type or getContentType( fileupload.filename ) if content_type is None: self.error(400) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write( "Unsupported image type: " + fileupload.filename ) return logging.debug( "File upload: %s, mime type: %s", fileupload.filename, content_type ) try: (img_name, img_url) = self._store_image( fileupload.filename, fileupload.file, content_type ) self.response.headers['Location'] = img_url ex=None except Exception, err: logging.exception( "Error while storing image" ) self.error(400) self.response.headers['Content-Type'] = 'text/plain' self.response.out.write("Error uploading image: " + str(err)) return #self.redirect(urlBase % img.key() ) #dummy redirect is acceptable for non-AJAX clients, # location header should be acceptable for true REST clients, however AJAX requests # might not be able to access the location header so we'll write a 200 response with # the new URL in the response body: acceptType = self.request.accept.best_match( listRenderers.keys() ) out = self.response.out if acceptType == 'application/json': self.response.headers['Content-Type'] = 'application/json' out.write( '{"name":"%s","href":"%s"}' % ( img_name, img_url ) ) elif re.search( 'html|xml', acceptType ): self.response.headers['Content-Type'] = 'text/html' out.write( '<a href="%s">%s</a>' % ( img_url, img_name) ) def _store_image(self, name, file, content_type): """POST handler delegates to this method for actual image storage; as a result, alternate implementation may easily override the storage mechanism without rewriting the same content-type handling. This method returns a tuple of file name and image URL.""" img_enc = base64.b64encode(file.read()) img_enc_struct = "data:%s;base64,%s" % (content_type, img_enc) img = Image( name=name, data=img_enc_struct ) img.put() logging.info("Saved image to key %s", img.key() ) return ( str(img.name), img.key() ) 

Mein Bildmodell:

 from google.appengine.ext import db class Image(db.Model): name = db.StringProperty(required=True) data = db.TextProperty(required=True) created = db.DateTimeProperty(auto_now_add=True) owner = db.UserProperty(auto_current_user_add=True) 

Jede Hilfe wird sehr geschätzt. Dieser Code, abzüglich meiner Bildcodierung in _store_image, kommt aus dem blooger Zweig der Gvdent hier .

One Solution collect form web for “Base64 kodiert binäre hochgeladene Daten auf der AppEngine”

Ihr Speicher Bildcode könnte so sein ….

 img = Image( name=name, data=file.read() ) img.put() return ( str(img.name), img.key() ) 

Basen64encode von Binärdaten kann die Größe der Daten selbst erhöhen und die CPU-Codierung und Decodierungszeit erhöhen.

Und Blobstore verwendet die gleiche Speicherung sturcuture wie Datenspeicher, so ist es nur einfacher zu verwenden Datei hochladen Laden Download.

  • Mail send-receive in Google App Engine (reply_to Feld)
  • Keine Implementierung für Kind Exception Python Google App Engine
  • Senden von HTTP-Anfragen von App Engine
  • Google-Suche gibt keine 302 auf AppEngine zurück
  • GAE und Facebook Connect: Wie bekomme ich Alter und Geschlecht des Benutzers?
  • Python was bedeutet es "AttributeError: 'Unicode' Objekt hat kein Attribut 'has_key' '
  • Wie kodiere ich einen RSA-Schlüssel mit PKCS12 in Python?
  • Wie benutzt man die Python main () - Funktion in GAE (Google App Engine)?
  • Wie kann man den Absender der eingehenden E-Mail-Adresse in der Google App Engine überprüfen?
  • Undokumentierte maximale Länge für URL URL?
  • Kontext-Prozessor mit Werkzeug und Jinja2
  • Python ist die beste Programmiersprache der Welt.