我有一个Uint8Array
包含我需要发送到节点服务器进行处理的原始像素数据(RGBA)。我将它转换为浏览器上的blob并通过ajex发送,但检索节点端的数据是有问题的。我可以将{blob}作为Buffer
到req.files.image.data
但是如何将其转换回与Uint8Array
相同的序列?
在浏览器上:
sendBlob(new Blob(data, {type: "application/octet-stream"}), ...)
function sendBlob (blob, name) {
return new Promise((resolve, reject) => {
let data = new FormData()
data.append('image', blob, name)
data.append('width', 640)
data.append('height', 427)
$.ajax({
url: '/upload',
type: 'POST',
data: data,
processData: false,
contentType: false,
error: reject,
success: resolve
})
})
}
在节点服务器上:
lwip.open(req.files.image.data, {
width: parseInt(req.body.width),
height: parseInt(req.body.height)
}, (image, err) => ...)
这抱怨Buffer size does not match width and height
req.files.image.data
是blob而不是Uint8Array
。
答案 0 :(得分:0)
根据发布的数据创建。
Uint8Array
答案 1 :(得分:0)
原来问题在于我是如何创建blob的。我传递了一个TypedArray,blob只知道如何存储TypedArrays数组。所以它将我的数据转换为字符串,然后将其存储在blob中。
解决方案是简单地将TypedArray包装在一个数组中。
sendBlob(new Blob([data], {type: "application/octet-stream"}), ...)