Google app engine 从高性能blobstore提供图像服务,无需直接访问获取服务url()

Google app engine 从高性能blobstore提供图像服务,无需直接访问获取服务url(),google-app-engine,http-headers,jinja2,Google App Engine,Http Headers,Jinja2,我正在将我的站点转换为使用blobstore进行图像服务,我遇到了一个问题。我有一个页面,其中动态呈现了大量图像(通过jinja),唯一可用的数据是指向包含相关服务url的图像对象的实体键 以前,每个图像都有一个url,其行为“/show image?key={{image\u key}}”,该url指向以下行中的请求处理程序: def get(self): imageInfo = db.get(self.request.args.get("key")) imagedata = imag

我正在将我的站点转换为使用blobstore进行图像服务,我遇到了一个问题。我有一个页面,其中动态呈现了大量图像(通过jinja),唯一可用的数据是指向包含相关服务url的图像对象的实体键

以前,每个图像都有一个url,其行为
“/show image?key={{image\u key}}”
,该url指向以下行中的请求处理程序:

def get(self):
  imageInfo = db.get(self.request.args.get("key"))
  imagedata = imageInfo.data // the image is stored as a blob in the normal datastore
  response = Response()
  response.data = imagedata
  response.headers['Content-Type'] = imageInfo.type
  return response
我的问题是:我如何修改它,以便返回带有
imageInfo.data
的响应,而不是返回带有
imageInfo.saved\u serving\u url
(创建图像对象时从
get\u serving\u url
生成)的响应。更重要的是,这是个好主意吗?似乎将
保存的\u url
转换回数据(例如使用
urllib.fetch
)可能会首先抵消使用高速数据存储的速度和效率


也许我应该重写我的代码,这样jinja模板就可以直接访问每个图像的服务URL。但理想情况下,我希望避免这种情况,因为我必须传递大量的平行列表。

为什么不返回服务url而不是imagedata

<img src="/show-image?key={{image_key}}" />

def get(self):
  imageInfo = db.get(self.request.args.get("key"))
  return imageInfo.saved_serving_url

def get(自我):
imageInfo=db.get(self.request.args.get(“key”))
返回imageInfo.saved\u服务\u url

为什么不返回服务url而不是imagedata

<img src="/show-image?key={{image_key}}" />

def get(self):
  imageInfo = db.get(self.request.args.get("key"))
  return imageInfo.saved_serving_url

def get(自我):
imageInfo=db.get(self.request.args.get(“key”))
返回imageInfo.saved\u服务\u url

这很理想,但它似乎不起作用,以self.redirect()的形式返回url也不起作用。感觉应该有办法做到这一点,但是…什么不起作用?你有错误吗?它不返回服务url吗?图像加载失败-页面的源代码使用src“/show key?key=blahblah”显示它们,但据我所知,仅返回url不会导致图像加载。请记住,这些是我从img标记中检索的嵌入图像,而不是ajax请求或替换完整图像src url的东西。我已经说过,我对http响应的了解不是很好,所以可能我遗漏了一些东西…事实上-图像无法加载30-40个缩略图。需要注意的是,在一个单独的页面上,通过直接传递给jinja模板的get_serving_URL,显示和加载了数量相似的图像,因此我的问题只是通过将图像源指向请求处理程序来呈现图像(而不是将完整的图像URL直接传递给模板)这很理想,但似乎不起作用,以self.redirect()的形式返回url也不起作用。感觉应该有办法做到这一点,但是…什么不起作用?你有错误吗?它不返回服务url吗?图像加载失败-页面的源代码使用src“/show key?key=blahblah”显示它们,但据我所知,仅返回url不会导致图像加载。请记住,这些是我从img标记中检索的嵌入图像,而不是ajax请求或替换完整图像src url的东西。我已经说过,我对http响应的了解不是很好,所以可能我遗漏了一些东西…事实上-图像无法加载30-40个缩略图。需要注意的是,在一个单独的页面上,通过直接传递给jinja模板的get_serving_URL,显示和加载了数量相似的图像,因此我的问题只是通过将图像源指向请求处理程序来呈现图像(而不是将完整的图像URL直接传递给模板)自己获取URL并返回内容要比直接提供blob慢得多。服务重定向到服务URL同样会失去使用图像服务API的所有好处。直接使用图像服务URL是获得API提供的改进的唯一方法。自己获取URL并返回内容要比直接服务blob慢得多。服务重定向到服务URL同样会失去使用图像服务API的所有好处。直接使用图像服务URL是获得API提供的改进的唯一途径。