2017-01-27 9 views
0

処理のためにノードサーバーに送信する必要があるRAWピクセルデータ(RGBA)を含むUint8Arrayがあります。私はそれをブラウザ上のブロブに変換し、それをajex経由で送信しますが、ノード側でデータを取得することは問題になります。私はBufferからreq.files.image.dataまでブロブを得ることができますが、それを私がUint8Arrayと同じシーケンスに戻すにはどうしたらいいですか?これはBuffer size does not match width and heightreq.files.image.dataとしてはブロブないラップUint8Arrayで文句ブラウザからノードにUint8Arrayを転送

lwip.open(req.files.image.data, { 
    width: parseInt(req.body.width), 
    height: parseInt(req.body.height) 
}, (image, err) => ...) 

:ノードサーバで

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 
    }) 
    }) 
} 

:ブラウザ上で

+0

明白な最初のステップは、https://www.npmjs.com/package/toようなもので、それを変換することによって、これが事実であることをuint8arrayノードを伝えることを確認するためにブロブを渡さないことですが、アーリーバッファ –

答えて

0

どのように私がBLOBを作成していたかが分かりました。私は単一のTypedArrayを渡しました.blobはTypedArraysの配列を格納する方法しか知りません。だからそれはブロブに格納する前に文字列に私のデータを変換していた。

解決策は、単純にTypedArrayを配列にラップすることです。

sendBlob(new Blob([data], {type: "application/octet-stream"}), ...) 
0

投稿されたデータからUint8Arrayを作成します。

let data = new Uint8Array(req.files.image.data); 
lwip.open(data, { 
    width: parseInt(req.body.width), 
    height: parseInt(req.body.height) 
}, (image, err) => ...) 
関連する問題