Как я могу заставить ax ios возвращать правильный тип буфера? - PullRequest
1 голос
/ 01 мая 2020

ПРИМЕЧАНИЕ: когда я впервые опубликовал этот вопрос ... я даже не знал, с чего начать, и даже как правильно задать вопрос. После нескольких комментариев я добавил больше данных к вопросу, а затем в конце концов изменил название вопроса на то, что есть сейчас - спасибо всем за помощь!

Я использую Nodejs в серверном приложении. используя визуальный код для моего отладчика.

Я читаю файл Garmin Fit File с диска, используя этот код:

    var fName = path.join(__dirname, './4861335825.fit');

    fs.readFile(fName, function (err, content) {

«Содержимое» содержит следующее:

file read buffer

Я загружаю ЖЕ Файл Garmin Fit через вызов REST. Вот как выглядит ответ от вызова REST

enter image description here

Вот заголовок ответа:

enter image description here

Я пытаюсь сделать так, чтобы response.data был таким же, как когда я читал его с диска. Вот код, в котором я пытаюсь создать буфер для чтения данных

    encoding = 'utf8'
    const buf1 = Buffer.from(response.data, encoding);

Согласно комментарию Пойнти, я попытался использовать следующую кодировку для вызова REST ОБА сбой

encoding = 'utf8';
encoding = 'utf16le';

Вот как выглядит буфер:

rest api buffer.from

Файлы ЖЕ , разница один считывает диск, а другой пытается прочитать данные response.data из вызова REST, который его загружает.

Данные в обоих буферах выглядят одинаково:

[14, 16, 77, ...]

Однако тип и размеры радикально отличаются:

buffer compare

Следует также отметить, что файл, считываемый с диска, успешно анализируется с использованием подгонки -file-анализатор. Один из вызовов 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);
        }

Как я могу сделать Буфер из REST скачать так же, как тот, который считывается с диска?

1 Ответ

1 голос
/ 01 мая 2020

Спасибо @ jo sh .trow за предложение.

Вот что исправило это:

до:

    var config = {
      headers:{Authorization:header}
    }

после:

    var config = {
      responseType: 'arraybuffer',
      headers:{Authorization:header}
    }

И вызов ax ios возвращает тот же буфер, что и чтение файла!

enter image description here

...