0

StackOverflow に関する私の最初の質問。. .

Python を使用する Google App Engine アプリケーションで、小さな pdf 画像を html とインラインでページに表示しようとしています。

私は次のように書かれた小さなクラスを持っています:

class modelReport(db.Model):
    Applicant = db.StringProperty()
    Reportblob = db.BlobProperty()

小さなフォームを使用して画像をアップロードし、画像を次のハンドラーに送信します。

class UploadResults(webapp.RequestHandler):
    def post(self):
        m = modelReport()
        m.Applicant = self.request.get("txtApplicantName")
        Reportblob = self.request.get("file")
        m.Reportblob = db.Blob(Reportblob)
        m.put()

次のコードを使用して、申請者の画像と名前を表示しています。

class RetrieveResults(webapp.RequestHandler):
    def get(self):
        self.response.out.write('''
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="em">
        <head>
        <meta http-equiv="Content-Type" content="application/pdf" />
        <title>Results Page</title>
        </head>
        <body>
        ''')
        reports = db.GqlQuery('SELECT * FROM modelReport')
        for report in reports:
            self.response.out.write('</p><b>%s</b> report is:' % report.Applicant)
            self.response.out.write("<div><img src='img?img_id=%s'></img>" % report.key())
        self.response.out.write('''
        </body></html>
        ''')

開発サーバーの Datastore Viewer を使用すると、新しい「modelReport」エンティティが表示され、Key、Write Ops、ID、Key Name、Applicant、Reportblob が一覧表示されます。

問題は、出力が申請者を一覧表示し、「?」が付いた小さな青いボックスが表示されることです。画像ファイルが見つからないような途中です。. . また、開発サーバーのログ コンソールには 404 エラーが表示されます。

INFO..."GET /retrieve_results/all_results HTTP/1.1" 200 -
INFO..."GET /retrieve_results/img?img_id=ag...Aww HTTP/1.1" 404 -
INFO..."GET /retrieve_results/img?img_id=ag...BQw HTTP/1.1" 404 -
INFO..."GET /retrieve_results/img?img_id=ag...Bgw HTTP/1.1" 404 -

しばらくの間、間違った「Content Type」ヘッダーを使用している可能性があると考えていましたが、Apache Web サーバーを使用した同様のコードでは、テキストと画像が問題なく表示されます。

空のブロブストア属性「Reportblob」を作成しているようですが、確認またはデバッグする方法がわかりません。

GAE コードを修正するための任意またはすべてのヘルプをいただければ幸いです。

4

1 に答える 1

2

最初のいくつかの間違い:

  1. HTML ページは PDF ドキュメントではないため、コンテンツ タイプを pdf として宣言することはできません。

    <meta http-equiv="Content-Type" content="application/pdf" />
    

    代わりに、次のようにする必要があります

    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    
  2. PDF ドキュメントは画像ではありません。単にsrcPDF ドキュメントの URL を指定して、それが表示されることを期待することはできません。

    <div><img src='img?img_id=%s'></img>
    
  3. 確認中: blobstore から画像/img?img_id=<..>を提供するハンドラがあると思いますか?

するべきこと:

  1. 上記のポイント 3 のリンクで説明されているように、ブロブを適切に提供していることを確認してください。

  2. PDF 文書を HTML ページに適切に埋め込む方法に関するすべてのオプションを参照してください: PDF を HTML に埋め込む推奨方法? (最も単純なのはPDFObject です)

于 2012-08-08T10:03:25.337 に答える