XmlHttpRequest请求ArrayBuffer会导致垃圾

时间:2019-06-15 17:01:48

标签: javascript xmlhttprequest

我制作了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个索引)。这些值以某种方式保留了一定的模式,因此它们不是完全随机的,但是我看不出出了什么问题。缓冲区的大小也完全不切实际,例如288字节文件的216840字节。例如:

[-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,
 ... ]

老实说,我被困住了。这不是字节序的问题,我可以使用邮递员为文件请求与XHR中相同的URL,并接收正确的文件,并且相同的代码适用于其他文件。还有什么可能是错的?

(出于完整性考虑:此文件已在Chrome 74上进行了测试,并且文件在Windows上使用Nginx 1.16.0提供)

0 个答案:

没有答案