如何在Python中从blob文件提供PDF

时间:2014-02-12 02:24:46

标签: python google-app-engine pdf

我正在尝试使用Google App Engine(Python)创建一个Web应用程序,允许用户上传PDF并稍后查看。我已经能够在NDB数据存储区中使用BlobProperty保存PDF,但是当我从数据库中提取文件时,它们是带有奇怪字符的纯文本字符串。

我已尝试在HTML和PDFObject中使用object标记,但两者都将PDF作为输入而不是blob文件。有没有办法直接从我的blob文件到PDF?如果在页面上实际显示PDF太难,我很乐意提供可下载的链接。

class Thing(ndb.Model):
    blob = ndb.BlobProperty()

HTML2 = """\
    <object data={s} type="application/pdf" width="100%" height="100%"></object>
    """

class MainPage(webapp2.RequestHandler):
    def get(self):
        thing_query = Thing.query()
        things = thing_query.fetch()

        for thing in things:
            self.response.write(HTML2.format(s=thing.blob))

非常感谢!

1 个答案:

答案 0 :(得分:0)

blobstore用于上传和下载二进制数据。您可以将其用于PDF。

仅在数据存储区中存储blob密钥(String)。上传处理程序将从包含enctype =“multipart / form-data”的表单中的文件输入中提取PDF,将其上传到BlobStore,并允许您保存blobkey。

然后,您可以使用从数据存储区中的相关模型中提取blobkey的处理程序从blobstore提供PDF。

以下是一些上传和下载的示例处理程序。

class Thing(ndb.Model):
    blobkey = ndb.StringProperty()

class UploadBarcodeBG(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_uploads()
        if len(upload_files):
            blob_info = upload_files[0]
            thing = Thing()
            if thing and blob_info:
                thing.blobkey = str(blob_info.key())
                thing.put()
                self.redirect_to("ServeThing", thingkey=thing.key())


class ServeThing(blobstore_handlers.BlobstoreDownloadHandler):
    def get(self, thingkey):
        thing = Thing.get(thingkey)
        if thing and thing.blobkey:
            blob_info = blobstore.BlobInfo.get(thing.blobkey)
            self.send_blob(blob_info)
        else:
            self.error(404)