我已将用户上传的pdf文件存储在数据存储区中,如BlobProperties:
<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="pdf">
<input type="submit" value="Upload">
</form>
使用以下处理程序:
def post(self):
p = self.request.get('pdf')
if p:
person.pdf = p
我也尝试了最后一行的这个版本:
person.pdf = db.Blob(p)
似乎以同样的方式工作。我试着这样显示它:
<embed src="{{ person.pdf }}" width="500"
height="375" type="application/pdf">
使用此处理程序:
def get(self,person_id):
person = Person.get_by_id(int(person_id))
self.response.headers['Content-Type']="application/pdf"
template_values = {
'person' : person
}
template = jinja_environment.get_template('person.html')
self.response.out.write(template.render(template_values))
person.pdf的大小表明它确实包含整个pdf内容,但在模板中,变量
{{ person.pdf }}
导致以下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 10: ordinal not in range(128)
所以没有显示任何内容。据我所知,Blobproperties存储为字符串。我错过了什么?
答案 0 :(得分:0)
代码尝试使用ASCII编解码器将您的字符串转换为unicode。
您上传了一个真实的pdf,内容不是ASCII。如果pdf中的某个地方有一个字符"
,你也可能会破坏你的页面。
查看对内容进行编码。 Base64运行得相当好,但还有其他的。 至少你应该逃避那里的数据。
答案 1 :(得分:0)
这似乎是错误的最基本的方式是:
<embed src="{{ person.pdf }}">
应包含下载pdf文件的URL。但是,person.pdf实际上包含文件数据。
你需要一个处理程序来为html提供pdf数据的URL,以及一个单独的处理程序来返回pdf数据。
答案 2 :(得分:0)
我终于解决了这个问题:
self.response.write(person.pdf)
在显示处理程序中。 D'哦。