接收和解释内容类型为 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/ )
我正在尝试将二进制数据发送到 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/ )