2009-11-23 42 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