接收和解释内容类型为 application/octet-stream 的十六进制数据发送时出错

Error in receiving and interpreting hexadecimal data send with content type as application/octet-stream

我正在尝试将二进制数据发送到 Azure 移动服务 API。当我们收到请求并尝试解析数据时,高于 7f 的字节值(即 80、81、90、ff 等)会被不同地解释。例如,如果我们发送了

Sent data    : 67 01 00 00 31 00 31 00 32 00 31 00 00 00 A0 10
Received data: 67 01 00 00 31 00 31 00 32 00 31 00 00 00 ef bf bd 10

这是 curl 命令:

curl --header "Content-Type:application/octet-stream"   -X POST https://x.x.x.x/Api/temp --data-binary @/home/device_data.txt

Nodejs 移动服务脚本片段

exports.post = function(request, response) {

    var  payload=new Buffer(request.body);
    console.log(payload);
}

我怀疑我们的 8 位二进制流被解释为 7 位字符流。有人可以解释一下吗?

request.body 来自 ExpressJS - 在这里阅读:http://expressjs.com/4x/api.html#req.body

您会注意到 request.body 不是请求的正文 - 它是经过解析的正文。因此,您可能需要显式使用 body-parser 来处理请求。

这里是同一事物的另一个例子:nodejs/express and binary data in POST

另请查看正文解析器:https://github.com/expressjs/body-parser#bodyparserrawoptions

遗憾的是,我认为您无法在移动服务案例中设置额外的中间件。您可以做的一件事是将您的应用程序转换到 Azure App Service 移动应用程序 - 它采用常规 ExpressJS 应用程序,但通过 SDK 处理身份验证、推送通知和数据访问(参见 https://github.com/Azure/azure-mobile-apps-node and the introductory blog post: https://azure.microsoft.com/en-us/blog/announcing-node-for-azure-mobile-apps/