Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中显示Blob图像(应用程序引擎)_Python_Image_Google App Engine_Blob - Fatal编程技术网

在Python中显示Blob图像(应用程序引擎)

在Python中显示Blob图像(应用程序引擎),python,image,google-app-engine,blob,Python,Image,Google App Engine,Blob,我无法在页面上显示图像。我可以很好地保存它 以下是处理程序: class disp_image(webapp.RequestHandler): def get(self): key = self.request.get('key') image = Images.get(key) if image: self.response.headers['Content-Type'] = "image/png"

我无法在页面上显示图像。我可以很好地保存它

以下是处理程序:

class disp_image(webapp.RequestHandler):
    def get(self):
        key = self.request.get('key')
        image = Images.get(key)
        if image:
            self.response.headers['Content-Type'] = "image/png"
            return self.response.out.write(images.image)
        else:
            self.response.headers['Content-Type'] = "image/png"
            return self.response.out.write("/static/unknown.gif")

class Profile(MainHandler):
    def get(self):      
        if self.user:
            self.render('profile.html', username = self.user.name, email = self.user.email, first_name = self.user.first_name, last_name = self.user.last_name, country = self.user.country, prov_state = self.user.prov_state, city_town = self.user.city_town)
        else:
            self.redirect('/register')

class Change_Profile_Image(MainHandler):
    def get(self):
        if self.user:
            self.render('change_profile_image.html', username = self.user.name, firstname=self.user.first_name)
        else:
            self.render('change_profile_image.html')

    def post(self):
        images = Images()
        imageupl = self.request.get('img')
        images.image = db.Blob(imageupl)
        images.put()
        self.redirect('/profile')
db stuff的功能如下:

class Images(db.Model):
    image = db.BlobProperty()

class User(db.Model):
    name = db.StringProperty(required=True)
    pw_hash = db.StringProperty(required=True)
    email = db.StringProperty(required=True)
    first_name = db.StringProperty()
    last_name = db.StringProperty()
    country = db.StringProperty()
    prov_state = db.StringProperty()
    city_town= db.StringProperty()
    clan= db.StringProperty()
    handle= db.StringProperty()
表格:

<form enctype="multipart/form-data" method="post">
       <input type="file" name="img" />
</form>

我的模板替换位代码:

<img src="/disp?key={{image}}" /></img>

我不确定,但我认为您不应该从
disp\u image
类的get方法返回

class disp_image(webapp.RequestHandler):
    def get(self):
        key = self.request.get('key')
        image = Images.get(key)
        if image:
            self.response.headers['Content-Type'] = "image/png"
            self.response.out.write(images.image)
        else:
            self.response.headers['Content-Type'] = "image/png"
            self.response.out.write("/static/unknown.gif")

你能解释一下模板渲染是从哪里调用的吗?您在哪里传递
图像
属性?

您不必自己提供图像。谷歌可以用谷歌高性能图像服务免费完成这项工作! 见: 获取服务url(blob\u键,大小=None,裁剪=False,安全url=None)
您只需获取一次服务url,然后将其保存在Images模型类的HTML模板中即可使用。

首先,我认为您混淆了图像键和图像二进制数据

模板

您应该将图像键(字符串)写入模板:

 <img src="/disp?key={{image_key}}" />
 <img src="/disp?key=AC3CK3333KCCK2K213" />
您应该将unknown.gif存储在数据存储中并按键引用它,或者您应该将
“/static/unknown.gif”
url写入模板,而不是
“/disp?key=…”


最后,测试图像处理程序是否工作的最简单方法是,当您将
/disp?key=…
插入浏览器URL栏时,它应该加载所需的图像

你有什么问题?(404,垃圾内容,等等?)你也可以发布你的app.yaml和路由设置。没有传递{image}。另外,我已经手动输入了image键,但仍然没有显示任何图像。Yaml
{{应用程序:suitegamer版本:1运行时:python27 api_版本:1线程安全:true处理程序:-url:/static static\u dir:static-url:/img static\u dir:img-url://.*脚本:main.app库:-名称:jinja2版本:最新-名称:PIL版本:“1.1.7”}
我将首先尝试查看/disp?key=是否正常工作。您可以发布与每个处理程序相关的路由吗?您已经向我们展示了(几乎)所有相关的代码都很好,但你们并没有真正解释问题所在。我已经解决了。我已经阅读了太多教程,似乎代码是遗留下来的,但python并没有将其视为一个错误。非常狡猾。谢谢各位。你们能告诉我们,为了解决这个问题,你们做了哪些更改吗?这可能会对我们未来有所帮助ers.:)suitegamer,请发布你的最终解决方案。我也有同样的问题,但还没有找到答案。这不是免费的。你为外向的bandwith付费。这有点随机,但你会因为支持GAE lol而得到谷歌的付费吗?你当然是一个超级粉丝,一开始我喜欢它的简单性,但现在它开始变得有点低效了,太复杂了。
    else:
        self.response.headers['Content-Type'] = "image/png"
        return self.response.out.write("/static/unknown.gif")