1

この質問をテンプレートとして使用して同じ問題を解決しましたが、投稿時に問題が発生しています。私はこれらのコンポーネントを持っています:

  1. 画像 URL のテキストボックスを含むHTMLフォーム。この投稿先...
  2. 投稿された URL を受け取り、それをエンコードし、再度投稿するために使用するハンドラーurlfetch...
  3. 実際の保存を行う個別のファイル アップロード ハンドラ。

ファイル入力を使用すると、コンポーネント #3 は単独で正常に動作します。urlfetchしかし、画像の URL だけから必要なものを取得する方法がよくわかりません。プロセスがタイムアウトするか、最終ハンドラーから 500 応答を受け取ります。

# 1
class URLMainHandler(RequestHandler):
    def get(self):
        return render_response('blob/upload_url.html', 
                               upload_url=url_for('blobstore/upload/url'))
# 2        
class URLUploadHandler(RequestHandler):
    def post(self):
        import urllib
        # Get the posted image URL. 
        data = urllib.urlencode({'file': self.request.form.get('file')})
        # Post image to blobstore by calling POST on the file upload handler. 
        result = urlfetch.fetch(url=blobstore.create_upload_url(url_for('blobstore/upload')),
                                payload=data, 
                                method=urlfetch.POST)

        return self.redirect(url_for('blobstore/url'), result.status_code)

# 3
class UploadHandler(RequestHandler, BlobstoreUploadMixin):
    def post(self):
        # 'file' is the name of the file upload field in the form.
        upload_files = self.get_uploads('file')
        blob_info = upload_files[0]
        response = redirect_to('blobstore/serve', resource=blob_info.key())
        # Clear the response body.
        response.data = ''
        return response

繰り返しますが、これは私が従うプロセスです。ご協力いただきありがとうございます!

4

2 に答える 2

3

blobstore API を使用せずに同じことを実現できます。URL を取得し、urlfetch().content メソッドを使用してコンテンツを取得し、それを blob プロパティとして保存する必要があると思います。

url = "imageurl"
result = urlfetch.fetch(url)
if result.status_code == 200:
   prof.avatar = db.Blob(result.content)

データストアからの画像を blob として保存および提供する際のさらなる参照用。

store-images-in-datastore の詳細については、この投稿を参照してください。

于 2011-03-21T06:09:48.840 に答える
3

ブロブストア HTTP 要求のペイロードとして画像を含めるだけで、画像の処理方法を理解することを期待することはできません。ブロブストアはタイプ メッセージを想定していapplication/multipart-form-dataます。これは、ブロブストアにアップロードするときにブラウザが提供するものです。これを行うライブラリがここにあります。

SDK の将来のリリースには、ブロブストアにプログラムでブロブを格納する機能が含まれる予定です。これにより、この厄介なハックの必要がなくなります。

ただし、画像のサイズが 1 MB 未満の場合は、Abdul が回答で示唆しているように、画像をデータストアに直接保存する方がはるかに簡単な解決策です。

于 2011-03-22T04:06:17.250 に答える