2017-12-03 1 views
0

Eine Azure-Funktion HTTP-Bindung liest von einem Azure-Blobspeicher ein Bild als Base64-Zeichenfolge.Zurückgeben von base64-Bildern aus Azure-Funktionen als Binärdaten

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

Er wandelt es einen neuen Puffer mit:

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

Dann es gibt diese auf diese Weise puffern:

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

Leider funktioniert das nicht. das Setzen von "isRaw" funktionierte nicht so gut wie das Zurückgeben des Puffers (buf) selbst. Der Fehler ist 406 (nicht akzeptabel) und der Textkörper ist leer.

Die Frage ist: Wie würde man eine Base64 als Binärbild durch eine HTTP-Out-Bindung zurückgeben?

Auch einen weiteren Header (wie zB Content-Length) Zugabe nicht mit diesem Fehler:

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

Experimentiert mit Anwendung/Oktettstream Inhaltstyp und Ergebnis ist das gleiche. Wenn Sie nicht den Inhaltstyp festlegen, wird der Puffer als Base64-Zeichenfolge zurückgegeben. –

Antwort

1

Wenn Sie dies soll Azure Funktionen Beta verwenden arbeiten:

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

Auch bei der Verwendung von roh oder senden es gibt keine Notwendigkeit, Context.done aufzurufen, wie es implizit aufgerufen wird.

+0

Ehrfürchtig. Dies funktioniert mit bereitgestellten Funktionen in der Beta-Version, jedoch nicht mit dem lokalen Emulator. Dies kann daran liegen, dass ich nicht herausgefunden habe, wie man Beta-Funktionen auf dem lokalen Emulator aktiviert. –

+0

Stellen Sie sicher, dass Sie "npm installieren -g azure-functions-core-tools @ core" neueste Version 2.0.1-Beta.22, die Azure-Funktionen Beta – nelak

+0

Dies sollte nicht in der Nicht-Beta-Version funktionieren, ist da ein anderer Weg? – K48