Base64编码的连接code二进制上传的AppEngine上的数据 [英] Base64 encode binary uploaded data on the AppEngine

查看:163
本文介绍了Base64编码的连接code二进制上传的AppEngine上的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以尽可能多地调用,因为我可能可以跳到BLOBSTORE一直在努力为Base64途中从用户(在这种情况下,一个值得信赖的管理员)code图像数据。每次我试图连接code,我收到一条错误消息:

I've been trying to Base64 encode image data from the user (in this case a trusted admin) in order to skip as many calls to the BlobStore as I possibly can. Every time I attempt to encode it, I recieve an error saying:

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

我GOOGLE了错误(少部分显著),并发现它可能有一些做的Uni code(?)。模板部分仅仅是一个基本的上传表单,而处理器包含以下code:

I've googled the error (the less significant parts) and found that it may have something to do with Unicode (?). The template portion is just a basic upload form, while the handler contains the following code:

  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() )

我的图像模型:

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)

任何帮助是极大AP preciated。这code,在零下_store_image我的图像编码,来源于gvdent 的blooger分支这里

推荐答案

店面形象code可能是这样的....

your store image code could be like this....

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

操作的二进制数据base64en code可以增加数据本身的尺寸和增加的CPU的编码和解码时间

doing base64encode of binary data may increase the size of data itself and increase the cpu encoding and decoding time.

和Blob存储使用相同的存储sturcuture数据存储,所以它只是让​​更容易
使用文件上传商店下载。

and Blobstore uses the same storage sturcuture as datastore, so it is just making easier to use file upload store download.

这篇关于Base64编码的连接code二进制上传的AppEngine上的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆