从Google App Engine下载或显示BlobProperties

时间:2014-01-24 01:28:20

标签: python google-app-engine

如何从数据存储中选择,下载或显示单个条目。特别是如果这些条目包含BlobProperty。

2 个答案:

答案 0 :(得分:0)

这完全取决于您当前存储在BlobProperty中的内容。由于它通常用于存储大小上限为1 MB的数据,因此我假设您将其存储为图像,甚至是某些文件,这些都在此限制之下。

很可能,您可能希望通过Web应用程序提供指向用户的链接以下载文档,或者如果它是图像,您可能希望自己在Web应用程序中呈现它(例如用户的头像什么的)。

答案 1 :(得分:0)

以下是我下载存储在数据存储区中的blob的代码。首先是HTML:

<a href="/dynfile/example/Disclaimer.pdf">Disclaimer</a>

我使用webapp2和NDB。服务器代码。

class DynLoad(webapp2.RequestHandler):

    def get(self, parent, cid):

        dyn = ndb.Key('Dynamic', cid, parent=ndb.Key('Examples', parent)).get()                                     
            if dyn:

                self.response.headers[str('ETag')] = str(dyn.modified)
                if 'If-None-Match' in self.request.headers:
                etags = [x.strip()
                         for x in self.request.headers[str('If-None-Match')].split(',')]
                if str(dyn.modified) in etags:
                    self.response.set_status(304)
                    return

            content_type = mimetypes.guess_type(cid)[0]
            self.response.headers[str('Content-Type')] = str(content_type)
            self.response.headers[str('Content-Disposition')] = str('attachment; filename=%s' % cid)
                self.response.out.write(dyn.blob)
        else:
            logging.error('Blob NOT FOUND for : %s parent : %s' % (cid, parent))

webapp2路线:

    webapp2.Route(r'/dynload/<parent:[^/]+>/<cid:[^/]+>', handler=DynLoad, name='dynload'),