2

Python と jinja フレームワークで Google アプリ エンジンを使用しています。

ユーザーが画像をアップロードしてサムネイルで使用できるようにしたいと考えています。

画像はサムネイル用で 10 個までなので、データベースを使用しない理由はありません。

これが私のhtmlです

<form class="reg-page" method="post" enctype="multipart/form-data" />
   <label>Name </label>
   <input type="text" class="span12" name="name" value={{name}}>
   <label>Description  </label>
   <textarea class="span12" name="description" value={{description}}></textarea>
   <label>Photo  </label>
   <div class="fileupload fileupload-new" data-provides="fileupload">
     <div>
       <span class="btn btn-file"><span class="fileupload-new">Select image</span>
       <span class="fileupload-exists">Change</span><input name="image" type="file" /></span>
       <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
    </div>
   </div>
   <button class="btn-u pull-right" type="submit">Εγγραφή </button>
</form>
{{test}}

バックエンドはシンプルです:

class ImgUpload(db.Model):
   name = db.StringProperty()
   description = db.StringProperty(multiline=True)
   img_img = db.BlobProperty()

class testhandler(BaseHandler):

    def get(self):
        self.render("test.html")

    def post(self):
        images = ImgUpload()
        name = self.request.get('name')
        description = self.request.get('description')
        img_img = image = self.request.get("image")
        images.img_img = db.Blob(img_img)
        images.name = name
        images.description = description
        images.put()
        u = ImgUpload.gql("WHERE name = '%s'"%name).get()
        self.response.out.write("""<img src="/test?test=%s"></img>""" %u.key())


app = webapp2.WSGIApplication([("/test",testhandler)

                            ],debug=True)

コードを実行すると、破損したイメージが表示されます。

4

1 に答える 1

2

投稿を受け取ったら、画像を保存するためのモデルを作成する必要があります

例えば

class Image(ndb.Model): 

    file = ndb.BlobProperty()
    filename = ndb.StringProperty()
    mimetype = ndb.StringProperty()
    size = ndb.IntegerProperty()
    width = ndb.IntegerProperty()
    height = ndb.IntegerProperty()

次に、画像の URL を、データストアから画像を取得するコードにマップし、データ セットとコンテンツ タイプ ヘッダーを正しく返すハンドラーを作成する必要があります。jinja コードでエンティティのプロパティを使用して、img タグで幅と高さを設定することもできます。

あなたのコードでは、imgタグをレンダリングしています

"""<img src="/test?test=%s"></img>""" %u.key())

/test?test= を get ハンドラーにマップする必要があり、次に a self.response.write(<the blobproperty>)を実行する必要があり、応答のコンテンツ タイプを image/jpeg または格納している画像タイプに設定する必要があります。さらに、画像を古いバージョンの IE に提供する場合は、ファイル名に画像拡張子を設定する必要もあります。

また、タグを作成するために画像の GQL クエリを実行しないでください<img>。images.put() を実行するとすぐに、images.key() を使用してオブジェクトのキーを既に取得しています。

于 2013-04-29T10:58:34.163 に答える