0

私はアバターをユーザーのプロフィールページに投稿することを含む小さなサイドプロジェクトに取り組んでいますが、それは十分に簡単なようです。GAEWebサイトの「ImagesPythonAPIの使用」の指示に従っています。

ただし、彼らが提供するサンプルはDjangoでは機能しないようです。この辺りを検索すると、同様の問題のあるスレッドが見つかりましたが、解決策はGAEで新しいバージョンのDjangoを使用したことによるものだと言いました。私はこの回避策を回避し、ビルドインAPIで実行しようとしています。私はPythonとDjangoの両方に慣れていませんが、収集できることから、画像を変換してデータストアに送信する関数に画像が適切に投稿されていません。これが私のコードです:

def post(self):
    contacts = Contact()

    if users.get_current_user():
        contacts.owner = users.get_current_user()
    else:
        self.redirect('/')

    contacts.fname = self.request.get('fname')
    contacts.lname =  self.request.get('lname')
    contacts.pnum = self.request.get('pnum')

    img = self.request.FILES['file'].read()
    img.resize(32,32)

    contacts.avatar = db.Blob(images.resize(img,32,32))
    contacts.put()
    self.redirect('/')

アバターフィールドを除いて、他のすべてのフィールドは正しく追加されます。変更されたリクエスト文字列は、修正を含む前述のスレッドからのものです。アバターにアクセスしようとすると、これがちょっと奇妙になりますが、ページには、私が設定したデフォルトの画像ではなく、壊れた画像が表示されます。これにより、フィールドがnullまたは欠落していても、要求時に一意のキーを描画するための何かがそこにあると私は信じています。画像表示機能は次のとおりです。

class Image (webapp.RequestHandler):
def get(self):
    contacts = db.get(self.request.get("img_id"))

    if contacts.avatar:
        image = contacts.avatar
        self.response.headers['Content-Type'] = "image/png"
        self.response.out.write(HttpResponseRedirect(contacts.avatar))
    else:
        self.response.out.wrute(HttpResponseRedirect("/static/image_not_found.gif"))

これも機能させるためにさまざまなバリエーションを試しました。最初は、手順のコードブロックを使用したことを信頼してください。

どんな助けでも大歓迎です。

前もって感謝します。

4

3 に答える 3

1

画像提供コードでは、リダイレクトの「URL」が画像データであるリダイレクトを書き出しています。たとえば、ユーザーを「%PNG...」にリダイレクトしています。応答データを直接書き出す必要があります。

それ以外に、HttpResponseRedirect とは何ですか? これは webapp フレームワークの一部ではありません。

また、データストア ビューアで画像が正しくアップロードされているかどうかを確認しましたか? 画像をアップロードする前にハッシュ化し、データストアに表示されるハッシュと比較してみてください (最初にサイズ変更呼び出しを削除してください)。それは同じですか?

于 2009-11-24T00:01:58.367 に答える
0

次の行は、GAE のデフォルト バージョンである Django 0.96 では機能しません。

img = self.request.FILES['file'].read()

私は以前に同様の質問を投稿した人でした (これはあなたが参照しているスレッドだと思います: Django を使用して App Engine に画像を保存する)

あなたの質問では、「回避策」であるため、新しいバージョンの Django を使用したくないと述べています。あなたが見逃しているのは、Google App Engine には既に Django 1.0 と 1.1 がインストールされていることです。作成したばかりなので、最初にデプロイされてビルドされたアプリが壊れないように、実行するバージョンを明示的に指定する必要があります。 0.96で。

django ライブラリ全体をデプロイに含める必要はありません。ブートストラップ ファイルを変更して、次のように App Engine に伝える必要があります。

import django

Django 1.1 を渡してほしいということです。

詳細については、http ://code.google.com/appengine/docs/python/tools/libraries.html をご覧ください。

ただし、別のスレッドで説明されているソリューションを使用すると、うまくいきます: Django を使用して App Engine にイメージを保存する

それが役立つことを願っています。

于 2009-11-24T23:41:14.533 に答える
0

これが私のコードです:

        if 'image' in request.FILES:
            imageFile = request.FILES['image'] #in forms.py: image  = forms.FileField(required=False)
            fileSize = imageFile.size  
            fileType = imageFile.content_type 
            filename = imageFile.name


            cPhoto = CarPhoto(car=car)
            cPhoto.content = db.Blob(imageFile.read())    
            cPhoto.filename = User.objects.make_random_password(32) +'.jpg'                         
            cPhoto.put()

次に、次のように画像を表示します。

def show_car_photo(リクエスト、ファイル名):

cPhoto = CarPhoto.gql('Where filename=:filename', filename=filename).get()
if cPhoto is None:
    return HttpResponse(filename + ': Image Not Found')

response = HttpResponse(mimetype="image/jpeg")
response.content = cPhoto.content
return response
于 2009-11-30T09:14:17.437 に答える