2017-12-03 3 views
0

Azure関数HTTPバインディングは、Azure BlobストレージからイメージをBase64文字列として読み込みます。Azure関数からbase64イメージをバイナリデータとして返す方法

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQTEhIUEhIUFBUV…K9rk8hCAEkjFMUYiEAI+nHIpsQh0AkisDYRTOiCAbWVtgCtI6IlkHh7LDTQXLH0EIQBj//2Q== 

これは、新しいバッファを使用して、それを変換します

const buf = new Buffer(pictureObj.data.split(",")[1], "base64"); 

そして、それは、これがこの方法をバッファ返します

context.bindings.res = { 
    "status": 200, 
    "headers": { 
     "Content-Type": type || "image/jpeg" 
    }, 
    "body": new Uint8Array(buf) 
}; 

残念ながら、これは動作しません。 "isRaw"を設定しても、バッファ(buf)自体を返すだけでなく動作しませんでした。エラーは406(Unacceptable)で、本文は空です。

質問は次のとおりです。HTTPアウトバインディングを通じて、どのようにしてbase64をバイナリイメージとして返すのでしょうか?また

、(そのようなContent-Lengthなど)より多くのヘッダがこのエラーで失敗したものを追加:

info: Worker.Node.2a68d094-3858-406b-a0c5-a81497b3436b[0] 
    Worker 2a68d094-3858-406b-a0c5-a81497b3436b malformed message invocationResponse.outputData.data.http.headers: string{k:string} expected 
[03/12/2017 02:44:32] A ScriptHost error has occurred 
[03/12/2017 02:44:32] Error: Choose either to return a promise or call 'done'. Do not use both in your script. 
[03/12/2017 02:44:32] Error: Choose either to return a promise or call 'done'. Do not use both in your script. 
+0

アプリケーション/オクテットストリームのコンテンツタイプで試され、結果は同じです。 content-typeを設定しないと、バッファがbase64文字列として返されます。 –

答えて

1

あなたはAzureの機能のベータ版を使用している場合、これは動作するはずです:

context.res.setHeader("Content-Type", "image/jpeg") 
context.res.raw(new Uint8Array(buf)) 

また、使用している場合それが暗黙のうちに呼び出されるときにcontext.doneを呼び出す必要はありません。

+0

ベータ版のデプロイされた機能では動作しますが、ローカルエミュレータでは機能しません。これは、ローカルエミュレータでベータ機能を有効にする方法がわからないためです。 –

+0

'npm install -g azure-functions-core-tools @ core'最新バージョンが2.0.1-beta.22であることを確認してください。Azure関数ベータ – nelak

+0

これは非ベータ版では動作しません。別の方法がありますか? – K48

関連する問題