2012-10-01 148 views
0

嗨,我正在开发IOS应用程序。我也使用JSON Web服务。并且我还使用Google App Engine for python。我对Python和谷歌应用程序引擎非常陌生。我无法弄清楚这个问题;从iOS应用程序中保存Google应用程序引擎base64照片

我发送json中的base64图像和其他信息。我想将其他信息保存到数据库(GQL)并保存到图像谷歌文件文件夹(Blob Store)中,并将此照片url与其他信息保存在Google数据库中。

你能帮我感谢名单

修订

import cgi 
import datetime 
import time 
import urllib 
import wsgiref.handlers 
import os, urllib2, re, base64 
import simplejson as json 


from google.appengine.ext import db 
from google.appengine.api import users,images, files 
from google.appengine.ext import webapp 
from google.appengine.ext import blobstore 
from google.appengine.ext.webapp.util import run_wsgi_app 
from google.appengine.ext.webapp import template 
from google.appengine.ext import blobstore 
from google.appengine.ext.webapp import blobstore_handlers 
import logging 


class PanoMessages(db.Model): 
    first_name=db.StringProperty(); 
    last_name=db.StringProperty(); 
    msg_text=db.TextProperty(); 
    photo_url=blobstore.BlobReferenceProperty(); 


class IOSDeneme(webapp.RequestHandler): 
    def post(self): 
     received_content = self.request.body; 

     try: 
      decoded_json = json.loads(received_content); 

      panoMsg=PanoMessages(); 
      panoMsg.photo_url=save_image_to_blobstore(decoded_json["picture"],"image/png"); 
      panoMsg.first_name=decoded_json["first_name"]; 
      panoMsg.last_name=decoded_json["last_name"]; 
      panoMsg.msg_text=decoded_json["msg_text"]; 
      panoMsg.put(); 



      self.response.out.write(json.dumps({'StatusCode':'2', 'StatusMessage':'OK'})); 

     except ValueError: 

       logging.error("json-time sent data which simplejson couldn't parse") 
       self.response.out.write(json.dumps({'StatusCode':'4', 'StatusMessage':'NO'})); 

     def save_image_to_blobstore(base64str, mimeType): 
      from google.appengine.api import files 
      import binascii 
      fileName1 = files.blobstore.create(mime_type=mimeType) 
      with files.open(fileName1, 'a') as f: 
       f.write(binascii.a2b_base64(base64str)) 
       files.finalize(fileName1) 
      return files.blobstore.get_blob_key(fileName1) 
+0

您是否设法将图像从前端传递给python作为后JSON请求? – topless

+0

你有没有考虑过从应用程序直接发送图像到Blobstore? Blobstore网络服务旨在接受潜在的大量数据(例如照片上传),将照片直接发送到Blobstore可能会更高效,一旦您知道成功,您可以使用照片元数据向您的应用发送单独的请求。 https://developers.google.com/appengine/docs/python/blobstore/overview –

回答

1

我没有测试过这一点,但这个应该在你的base64字符串和图像的MIME_TYPE将其保存到Blob存储区,然后返回图像的blob_key:

def save_image_to_blobstore(base64str, mime_type): 
    from google.appengine.api import files 
    import binascii 
    file_name = files.blobstore.create(mime_type=mime_type) 
    with files.open(file_name, 'a') as f: 
    f.write(binascii.a2b_base64(base64str)) 
    files.finalize(file_name) 
    return files.blobstore.get_blob_key(file_name) 

你会使用返回Blob键值并将其存储在一个模型商店您所描述的JSON对象中的其他信息。然后,您可以使用您希望的URL方案(可能基于存储您的其他JSON信息的密钥或ID或模型)提供图像。请参阅:https://developers.google.com/appengine/docs/python/blobstore/overview#Serving_a_Blob

+0

非常感谢您的回复 我得到错误:(你能检查 /基地/数据/家庭/应用程序/ s〜pythonilk /4.362173373789942575/pano.py:157:警告:'with'会成为Python 2.6中的保留关键字E 2012-10-02 11:03:20.326 :invalid syntax(pano.py ,线157) 我看着排队157,我看到这一点; FILENAME1 = files.blobstore.create(MIME_TYPE = mime类型) – hiwordls

+0

对不起,我以为你是使用Python 2.7如果您正在使用Python 2.5,添加此导入。 :'from __future__ import with_statement'。另外,我没有看到该行的任何语法错误,你能不能在你的问题中更多的代码,以便我可以更好地看看? – someone1

+0

我加入了代码thnx – hiwordls

相关问题