[英]Transfer Uint8Array from browser to node
我有一個包含原始像素數據(RGBA)的Uint8Array
,需要將其發送到節點服務器進行處理。 我將其轉換為瀏覽器上的Blob,然后通過ajex發送,但是在節點側檢索數據卻有問題。 我可以通過req.files.image.data
將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
。
從發布的數據創建一個Uint8Array
。
let data = new Uint8Array(req.files.image.data);
lwip.open(data, {
width: parseInt(req.body.width),
height: parseInt(req.body.height)
}, (image, err) => ...)
原來問題出在我創建Blob的方式上。 我傳遞了一個TypedArray,blob只知道如何存儲TypedArrays數組。 因此它在將數據存儲到Blob之前將其轉換為字符串。
解決方案是將TypedArray封裝在數組中。
sendBlob(new Blob([data], {type: "application/octet-stream"}), ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.