MLi*_*rus 2 javascript garmin node.js
注意:当我第一次发布这个问题时......我什至不知道从哪里开始,甚至不知道如何给这个问题一个好的标题。经过几次评论后,我向问题添加了更多数据,然后最终将问题标题更改为现在的样子 - 感谢大家的帮助!
我在服务器应用程序中使用 Nodejs。使用可视化代码作为我的调试器。
我正在使用以下代码从磁盘读取 Garmin Fit 文件:
var fName = path.join(__dirname, './4861335825.fit');
fs.readFile(fName, function (err, content) {
Run Code Online (Sandbox Code Playgroud)
“内容”包含以下内容:
我正在通过 REST 调用下载相同的Garmin Fit 文件。以下是 REST 调用的响应内容
这是响应头:
我试图让response.data 与我从磁盘读取它时相同。这是我尝试创建缓冲区来读取数据的代码
encoding = 'utf8'
const buf1 = Buffer.from(response.data, encoding);
Run Code Online (Sandbox Code Playgroud)
根据 Pointy 的评论,我尝试对 REST 调用使用以下编码失败
encoding = 'utf8';
encoding = 'utf16le';
Run Code Online (Sandbox Code Playgroud)
缓冲区如下所示:
这些文件是相同的,区别在于一个是从磁盘读取的,另一个是尝试从下载它的 REST 调用的response.data 中读取的。
两个缓冲区中的数据似乎相同:
encoding = 'utf8';
encoding = 'utf16le';
Run Code Online (Sandbox Code Playgroud)
然而,类型和尺寸却截然不同:
我还应该指出,从磁盘读取的文件使用 fit-file-parser 成功解析。REST 调用中的解析失败。
这是我使用此解析器的解析代码:https ://www.npmjs.com/package/fit-file-parser
// Create a FitParser instance (options argument is optional)
var fitParser = new FitParser({
force: true,
speedUnit: 'km/h',
lengthUnit: 'km',
temperatureUnit: 'kelvin',
elapsedRecordField: true,
mode: 'cascade',
});
var error = null;
var data = null;
try{
fitParser.parse(responseData, function (error, data){
if(error){
console.log(error);
return null;
}
return data;
});
}
catch(err){
console.log('error',err);
}
Run Code Online (Sandbox Code Playgroud)
如何使 REST 下载的缓冲区与从磁盘读取的缓冲区相同?
感谢@josh.trow 给我的建议。
这是解决这个问题的方法:
前:
var config = {
headers:{Authorization:header}
}
Run Code Online (Sandbox Code Playgroud)
后:
var config = {
responseType: 'arraybuffer',
headers:{Authorization:header}
}
Run Code Online (Sandbox Code Playgroud)
并且 axios 调用返回与文件读取相同的缓冲区!
| 归档时间: |
|
| 查看次数: |
6955 次 |
| 最近记录: |