2012-10-01 67 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

相關問題