3

我这样做节省了用户的BlobProperty图像:图像响应

user.image = urlfetch.fetch(image_url).content 

然后我使用的是URL,例如渲染图像:

/image/user_id 

图像必须保存,因为当我做len(user.image)时,我得到了数千个数字。在本地实例上,图像呈现正常。在部署应用程序,我得到以下错误,当我去到图像的URL没有显示在浏览器中:

Traceback (most recent call last): File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", line 86, in run self.finish_response() File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", line 127, in finish_response self.write(data) File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py", line 202, in write assert type(data) is StringType,"write() argument must be string" AssertionError: write() argument must be string

而且,这里的服务于图像处理程序:

class ImageHandler(webapp2.RequestHandler): 
""" Returns image based on id. """ 
def get(self, *args, **kwargs): 
    user = db.get(
     db.Key.from_path('User', models.User.get_key_name(kwargs.get('id')))) 
    if user.image: 
     self.response.headers['Content-Type'] = "image/jpeg" 
     self.response.out.write(user.image) 
    else: 
     self.response.out.write("No image") 

只是为了澄清我试图将content-type设置为jpeg和png。并且本地服务器上的工作正常。任何帮助,将不胜感激。谢谢!

+1

user.image的属性类型是什么? – mjibson 2012-02-11 22:42:07

+1

更好的方法是将urlfetch的数据存储在blobstore中,并使用'images.get_serving_url()'。 – mjibson 2012-02-11 22:43:00

+0

感谢您的提示。它是db.BlobProperty。 Blobstore将增加另一个级别的复杂性 - 这些是Twitter用户的小型化身图像。 – 2012-02-11 23:35:55

回答

0

回答我的问题,能解决一切:

self.response.out.write(str(user.image)) 

因为文档的例子不投的BlobProperty作为字符串这是令人困惑的。