Skip to main content
 首页 » 编程设计

python之使用谷歌应用引擎提供图像

2025年05月04日13txw1958

我在数据存储中添加图像作为 blob 属性。我不想使用 BlobStore,因为我不知道我以后是否会继续使用 GAE。问题是我看不到图像。我看到的是“损坏的图标”。

我是这样存储图片的

app = Applications() 
image = str(self.request.get("image")) 
app.img = db.Blob(image) 
app.put() 

img 是一个 db.BlobProperty()

这是我制作的图像服务类:

class ApplicationImageHandler(BaseHandler): 
    def get(self): 
        sURL = self.request.url.split("/") 
        app = Applications.get_by_id(long(sURL[-1])) 
        self.response.headers['Content-Type'] = 'image/jpeg' 
        self.response.out.write(app.img) 

这是我调用它时的页面:http://localhost:9082/applications/6310509548666880

我是这样调用它的:<img src="/images/{{app.key().id()}}">

当我在 html 中呈现时,“应用程序”是数据库中的整个实体。

如果我复制链接并将其粘贴到浏览器中,则会出现相同的“损坏图标”。

编辑:我刚刚在日志中看到图像上有一个代码 200。所以,我现在更困惑了:P

INFO     2013-06-01 15:18:27,650 server.py:585] default: "GET /images/4762397176758272 HTTP/1.1" 200 10 

这是我用来获取图像的 html 表单的一部分:

<span> 
  <input type="file" name="image"> 
</span> 

请您参考如下方法:

首先,尝试直接从浏览器请求图像,看看它是否正确:

http://localhost:9082/images/4762397176758272 

如果这不起作用,那么问题要么在您的 ApplicationImageHandler 中,假设 server.py:585 在您的 get() 方法中,要么在图像上传过程中。您确定它是图像/jpeg 吗?您是否在表单中包含了 enctype="multipart/form-data"?

此外,您使用的是 Django 还是 Jinja 模板?如果您使用的是 Django,则 {{app.key().id()}} 不正确——您应该使用 {{app.key.id}}相反。