我正在尝试使用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))
非常感谢!
答案 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)