2014-10-20 102 views
0

我試圖建立自己的社交網絡作爲一個項目來教我自己jQuery和谷歌應用程序引擎Python API。從jquery webapp上傳圖片到谷歌應用程序引擎

我目前正在努力解決如何將圖像上傳到應用引擎的數據存儲到服務器作爲個人資料圖片。

我想知道如果有人能給我一個快速示範,告訴我如何做到這一點,我已經制定出我需要使用ndb.BlobProperty但除此之外,我沒有線索。

如果有幫助,這裏是從我的服務器端的用戶等級:

class User(ndb.Model): 
    # Because we will use username as an ID/key, no need to define it. 

    profilePicture = ndb.BlobProperty() 
    surname = ndb.StringProperty(required=True) 
    email = ndb.StringProperty(required=True) 
    password = ndb.StringProperty(required=True) 
    banned = ndb.BooleanProperty(required=True) 
    rank = ndb.IntegerProperty(required=True) 
    strikes = ndb.IntegerProperty(required=True) 
    def toJSON(self): 
     jsondata = { 
      "username" : self.key.id(), 
      "forename" : self.forename, 
      "surname" : self.surname, 
      "email" : self.email, 
      "password" : self.password, 
      "banned" : self.banned, 
      "rank" : self.rank 
     } 
     return json.encode(jsondata) 

任何幫助,將不勝感激:)

+0

請參閱https://developers.google.com/appengine/docs/python/blobstore/#Python_Uploading_a_blob – 2014-10-20 12:52:32

+0

我會試一試,但這個例子是在服務器端創建頁面:我的html文件都是分開,所以我可能會感到困惑哈哈 – 2014-10-20 13:00:40

+0

在程序中保存併發送到響應的HTML頁面和發送給響應的文件沒有區別。但將它們保存爲文件,這就是要走的路,內聯HTML僅適用於示例。 – 2014-10-20 14:47:36

回答

1

的一種方式做,這是上傳到BLOB存儲和然後使用Google帳號Images API來爲其提供服務。嘗試鏈接。谷歌已經一步一步的指導如何上傳和提供服務。

以下是關於如何使用它的另一種方式,與Google文檔稍有不同的是,我只將ID和服務網址關聯到用戶。

class User(ndb.Model): 
....... 
profilePicture = ndb.StringProperty(repeated=True) #rather ndb.BlobProperty() 
surname = ndb.StringProperty(required=True) 
..... 

您將擁有一個將用於註冊的表單。下面是一個例子

<form action="/signUp" enctype="multipart/form-data" method="post"> 
    <input name="name"></input> 
    <label>Avatar:</label> 
    <input type="file" name="img"/> 
    <input type="submit" value="Create Account"></div> 
    </form> 

在您的應用程序文件,應處理好「/註冊」的請求。本課程將採取「blobstore_handlers.BlobstoreUploadHandler」作爲一個參數,而「webapp2.RequestHandler」

from google.appengine.ext import blobstore 
from google.appengine.api import images 
from google.appengine.ext.webapp import blobstore_handlers 

class NewUser(blobstore_handlers.BlobstoreUploadHandler): 
    def post(self): 
    try: 
     image = self.get_uploads('img') 
     url = images.get_serving_url(image.key(),400) 
     print ("image url %s" %url) 
     imageData = [url, image.key()] 
    except: 
     print ("Something went wrong") 

在上面的代碼,你將有一個爲imageData陣列,將有URL作爲第一個參數,密鑰作爲第二。你可以使用url服務圖像的網頁,通常在一個img標籤

<img src=the_generated_url> 

保存此陣的「profilePicture」屬性。如果需要,可以使用blob鍵(數組中的第二個元素)刪除圖像。

+0

我試過這個答案使用您提供的代碼,我得到這個錯誤:XMLHttpRequest無法加載文件:/// ppupload。只有協議方案支持跨源請求:http,data,chrome-extension,https,chrome-extension-resource。 – 2014-10-20 22:33:23

+0

當你嘗試上傳文件時,你是否收到了這條消息?如果您可以正確獲取圖片提供的網址,它將採用以下格式:http://your_app_id.appspot.com/randomStringImageId 如果您將其粘貼到瀏覽器中,您應該會看到圖片。 – shakirthow 2014-10-20 23:11:36

+0

我得知,當我嘗試上傳圖像 – 2014-10-21 08:16:40

相關問題