2009-11-23 76 views
0

我正在研究一個涉及將頭像發佈到用戶個人資料頁面的小項目,看起來很直觀。我遵循GAE網站上的「Using the Images Python API」的指示。GAE圖像通過Django發佈到數據存儲形式

雖然他們提供的示例似乎不適用於Django。在這裏搜索,我發現了一個類似問題的線程,但表示這個解決方案來自使用帶有GAE的更新版本的Django。我試圖避免這個工作,並讓它在API中構建。我對Python和Django都是新手,但從我可以收集的信息來看,圖像沒有正確地發佈到轉換圖像並將其發送到數據存儲區的函數中。這裏是我的代碼:

def post(self): 
    contacts = Contact() 

    if users.get_current_user(): 
     contacts.owner = users.get_current_user() 
    else: 
     self.redirect('/') 

    contacts.fname = self.request.get('fname') 
    contacts.lname = self.request.get('lname') 
    contacts.pnum = self.request.get('pnum') 

    img = self.request.FILES['file'].read() 
    img.resize(32,32) 

    contacts.avatar = db.Blob(images.resize(img,32,32)) 
    contacts.put() 
    self.redirect('/') 

所有其他字段正確添加,除了化身場。修改後的請求字符串來自前面提到的包含修復程序的線程。當試圖訪問化身,這有點奇怪,頁面顯示一個破碎的圖像,而不是我設置的默認圖像。這使我相信,雖然該字段爲空或缺失,但在請求時還是有一些可以繪製唯一密鑰的東西。這裏是顯示圖像功能:

class Image (webapp.RequestHandler): 
def get(self): 
    contacts = db.get(self.request.get("img_id")) 

    if contacts.avatar: 
     image = contacts.avatar 
     self.response.headers['Content-Type'] = "image/png" 
     self.response.out.write(HttpResponseRedirect(contacts.avatar)) 
    else: 
     self.response.out.wrute(HttpResponseRedirect("/static/image_not_found.gif")) 

試圖讓這個工作一樣,所以請相信我做到了,最初使用的代碼塊從指令時,我已經嘗試了許多不同的變化。

任何幫助,非常感謝。

在此先感謝。

回答

1

在您的圖片服務代碼中,您正在寫出一個重定向,其中重定向的'URL'是圖片數據 - 例如,您將用戶重定向到「%PNG ...」。您需要直接寫出響應數據。

除此之外,什麼是HttpResponseRedirect?它不是webapp框架的一部分。

此外,你檢查數據存儲查看器,看看圖像是否正確上傳?在上傳圖像之前嘗試對圖像進行散列處理,並將其與您在數據存儲區中看到的散列進行比較(首先除去調整大小的調用)。它是一樣的嗎?

0

以下行不會在Django 0.96,這是GAE默認版本的工作:

img = self.request.FILES['file'].read() 

我是誰之前發佈一個類似的問題之一(我認爲這是你的線程指的是:Storing Images on App Engine using Django

在你的問題中,你提到你不想使用更新版本的Django,因爲它是一種「解決方法」。我想你錯過的是他們的Google App Engine已經安裝了Django 1.0和1.1,他們只是這樣做了,所以你必須明確指定要運行的版本,以避免打破首次部署的應用程序在0.96。

您不必在部署中包含整個django庫。你只需要改變你的引導文件告訴App Engine的你時,你說:

import django 

您希望它交給你的Django 1.1。

你可以閱讀更多有關在這裏:http://code.google.com/appengine/docs/python/tools/libraries.html

但是,如果您在其他線程所描述的解決方案,它將工作:Storing Images on App Engine using Django

希望有所幫助。

0

這裏是我的代碼:

 if 'image' in request.FILES: 
      imageFile = request.FILES['image'] #in forms.py: image = forms.FileField(required=False) 
      fileSize = imageFile.size 
      fileType = imageFile.content_type 
      filename = imageFile.name 


      cPhoto = CarPhoto(car=car) 
      cPhoto.content = db.Blob(imageFile.read())  
      cPhoto.filename = User.objects.make_random_password(32) +'.jpg'       
      cPhoto.put() 

然後我像這樣顯示圖像:

高清show_car_photo(請求,文件名):

cPhoto = CarPhoto.gql('Where filename=:filename', filename=filename).get() 
if cPhoto is None: 
    return HttpResponse(filename + ': Image Not Found') 

response = HttpResponse(mimetype="image/jpeg") 
response.content = cPhoto.content 
return response