6

GAE からWebapp を使用したくないので、このコードを使用して Blobstore に画像をアップロードします (コード スニペット: http://flask.pocoo.org/mailinglist/archive/2011/1/8/app- engine-blobstore/#7fd7aa9a5c82a6d2bf78ccd25084ac3b )

@app.route("/upload", methods=['POST'])
def upload():
    if request.method == 'POST':
        f = request.files['file']
        header = f.headers['Content-Type']
        parsed_header = parse_options_header(header)
        blob_key = parsed_header[1]['blob-key']
        return blob_key

それは実際にBlobkeyのように見えるものを返します.これは次のようなものです:

2I9oX6J0U5nBCVw8kEndpw==

次に、次のコードを使用して、最近保存された Blob 画像を表示しようとします。

@app.route("/testimgdisplay")
def test_img_display():
    response = make_response(db.get("2I9oX6J0U5nBCVw8kEndpw=="))
    response.headers['Content-Type'] = 'image/png'
    return response

悲しいことに、この部分は機能しません。次のエラーが発生しました。

BadKeyError: Invalid string key 2I9oX6J0U5nBCVw8kEndpw==

以前にこのエラーに直面したことがありますか? Blobkey は適切にフォーマットされているようですが、手がかりが見つかりません。

4

2 に答える 2

8

Blob を取得するための呼び出しに単純な間違いがありました。

db.get("2I9oX6J0U5nBCVw8kEndpw==")

正しい呼び出しは次のとおりです。

blobstore.get("2I9oX6J0U5nBCVw8kEndpw==")

Webapp を使用せずに GAE Blobstore と Flask を介して完全なアップロード/サービング画像を探している人のために、完全なコードを次に示します。

アップロード フォームのテンプレートをレンダリングします。

@app.route("/upload")
def upload():
    uploadUri = blobstore.create_upload_url('/submit')
    return render_template('upload.html', uploadUri=uploadUri)

uploadUri をフォーム パス (html) に配置します。

<form action="{{ uploadUri }}" method="POST" enctype="multipart/form-data">

画像のアップロードを処理する関数は次のとおりです (実用的な理由から blob_key を返します。テンプレートに置き換えます)。

@app.route("/submit", methods=['POST'])
def submit():
    if request.method == 'POST':
        f = request.files['file']
        header = f.headers['Content-Type']
        parsed_header = parse_options_header(header)
        blob_key = parsed_header[1]['blob-key']
        return blob_key

次のようなパスで画像を提供するとします。

/img/画像ファイル名

次に、画像提供機能は次のとおりです。

@app.route("/img/<bkey>")
def img(bkey):
    blob_info = blobstore.get(bkey)
    response = make_response(blob_info.open().read())
    response.headers['Content-Type'] = blob_info.content_type
    return response

最後に、テンプレートで画像を表示する必要がある場所に、次のコードを配置するだけです。

<img src="/img/{{ bkey }} />
于 2013-08-06T06:51:42.387 に答える