如何从Azure函数返回base64图像作为二进制数据

时间:2017-12-03 02:48:09

标签: node.js azure azure-functions

Azure功能HTTP绑定从Azure Blob存储将图像读取为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(不可接受),正文是空的。

问题是:如何通过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.

1 个答案:

答案 0 :(得分:1)

如果您使用的是Azure功能测试版,则应该可以使用:

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

此外,当使用raw或发送时,不需要调用context.done,因为它被隐式调用。