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

时间:2015-10-07 14:20:04

标签: javascript node.js character-encoding binary azure-mobile-services

我正在尝试将二进制数据发送到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位字符流。有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:2)

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 Mobile Apps - 它采用常规ExpressJS应用程序,但通过SDK处理身份验证,推送通知和数据访问(请参阅https://github.com/Azure/azure-mobile-apps-node和介绍性博客文章: https://azure.microsoft.com/en-us/blog/announcing-node-for-azure-mobile-apps/

相关问题