以下是到目前为止我的 main.py 。
import cgi
import datetime
import logging
from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import images
logging.getLogger().setLevel(logging.DEBUG)
class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
imageblob = blobstore.BlobReferebceProperty()
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write('<html><body>')
query_str = "SELECT * FROM Greeting ORDER BY date DESC LIMIT 10"
greetings = db.GqlQuery (query_str)
for greeting in greetings:
if greeting.author:
self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname())
else:
self.response.out.write('An anonymous person wrote:')
self.response.out.write("<div><img src='img?img_id=%s'></img>" %
greeting.key())
self.response.out.write(' %s</div>' %
cgi.escape(greeting.content))
self.response.out.write("""
<form action="/sign" enctype="multipart/form-data" method="post">
<div><label>Message:</label></div>
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><label>Avatar:</label></div>
<div><input type="file" name="img"/></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
</body>
</html>""")
class Image (webapp.RequestHandler):
def get(self):
greeting = db.get(self.request.get("img_id"))
if greeting.avatar:
self.response.headers['Content-Type'] = "image/png"
self.response.out.write(greeting.avatar)
else:
self.response.out.write("No image")
class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()
if users.get_current_user():
greeting.author = users.get_current_user()
greeting.content = self.request.get("content")
avatar = get_serving_url(self.request.get("img"), size=None, crop=False)
#avatar = images.crop(self.request.get("img"), 0.0, 0.0,1.0,0.5)
greeting.avatar = db.Blob(avatar)
greeting.put()
self.redirect('/')
application = webapp.WSGIApplication([
('/', MainPage),
('/img', Image),
('/sign', Guestbook)
], debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
就像它说的那样the docs http://code.google.com/appengine/docs/python/images/functions.html:
返回提供图像的 URL。
此 URL 格式允许动态
调整大小和裁剪,这样你就不用
需要存储不同尺寸的图像
服务器。图像以低
高度优化的延迟,
无 cookie 的基础设施。
在你的代码中你似乎正在使用get_serving_url()
构建一个Blob
。这是行不通的,因为get_serving_url()
返回 URL,而不是图像数据。
你似乎也很困惑blobstore.BlobReferenceProperty http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#BlobReferenceProperty and a db.BlobProperty http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#BlobProperty -- a BlobReferenceProperty
引用上传并存储在中的对象斑点存储区 http://code.google.com/appengine/docs/python/blobstore/而一个BlobProperty
将 blob 数据直接存储在数据存储中。
解决您问题的更好方法是将您在请求中获得的图像存储起来(作为BlobProperty
)在您的模型中,然后使用不同的尺寸提供它get_serving_url()
.
或者,如果您希望存储大图像,请将图像存储在 blobstore 中并使用BlobReferenceProperty
-- 无论哪种方式,你应该只使用get_serving_url()
to serve图像,而不是存储它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)