Я делаю XmlHttpRequest
для загрузки бинарного файла как ArrayBuffer
:
async function downloadBinaryFile(fileName : string) : Promise<ArrayBuffer> {
return new Promise((resolve, reject) => {
const request = new XMLHttpRequest();
request.open('GET', `someFolder/${fileName}`, true);
request.responseType = 'arraybuffer';
request.onload = function(event) {
const arrayBuffer = request.response;
if (arrayBuffer)
resolve(arrayBuffer)
else
reject('empty array buffer');
};
request.onerror = reject;
request.send();
});
}
Это работает ... большую часть времени.Это означает, что он работает надежно для всех внешних двоичных файлов, которые я пробовал, но не для тех, которые я создал сам.Это говорит о том, что проблемы связаны с моими файлами, но я могу запросить их через Postman, и они получатся в порядке, а также загрузить их на внешний веб-сайт, который может их использовать.Так что проблема не должна быть в моих файлах.
Содержимое этих ArrayBuffers
должно быть 72 float
значений (представляющих 24 вершины куба) и 36 unsigned short
значений (представляющих 12 индексов).Значения каким-то образом сохраняют определенный шаблон, поэтому они не являются полностью случайными, но я не вижу, что идет не так.Буферы также имеют совершенно нереальные размеры, такие как 216840 байт для 288-байтового файла.Например:
[-0.5, -0.5, 0.5,
0.5, -0.5, 0.5,
-0.5, 0.5, 0.5,
... ]
становится
[-0.800000011920929, 0, 0,
-0.5666700005531311, 0, 0,
-0.3957499861717224, 0, 0,
... ]
Я честно застрял.Это не проблема порядка байтов, я могу запросить тот же URL для файла, что и в XHR с почтальоном, и получить правильный файл, и тот же код работает для других файлов.В чем еще может быть ошибка?
(ради полноты: это было проверено на Chrome 74, а файлы обслуживались с использованием Nginx 1.16.0 в Windows)