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.

  • In Google App Engines, wie die HTML-Quelle einer Seite einer abgerufenen URL in Python anzeigen?
  • Wie benutzt man die Python main () - Funktion in GAE (Google App Engine)?
  • Python xmpppy Client sendet keine Nachricht an appengine xmpp client
  • Google Cloud Storage mit django-appengine-Toolkit
  • Remote_api Konfiguration mit App Engine
  • Wie erhalte ich eine NDB-Entität aus dem Datenspeicher?
  • Google App-Engine QR-Code-Decoder
  • Kann nicht subprocess.call importieren, wenn du die Google App-Engine lokal ausführt
  • Arbeiten von datetime-Objekten in Google App Engine
  • Die Python PIL Library.Google App Engine kann nicht gefunden werden
  • Google Visualisierung api auf App-Engine funktioniert nicht ... (python)
  • Python ist die beste Programmiersprache der Welt.