2016-11-07 8 views
0

arraybuffer에 진 얻는 방법에 대해 설명합니다. 하나의 필드는 바이너리입니다. Javascript를 사용하여 이진 필드를 처리하고 싶습니다. 나는 주변에서 주변을 돌아 다니며 서로 다른 접근법을 시도했지만 만족스럽지 못했고 대부분 도로 블록에 닿았습니다.ArrayBuffer 광기 -.이</p> <p>에 내 머리를하고 내가 MySQL 데이터베이스에서 출력을 반환하는 JQuery와 아약스 포스트가

나는 base64로 인코딩 된 데이터를 전달한 다음 Javascript로 디코딩 할 수 있습니다.

데이터는 패킷이므로 DataView를 사용하여 데이터를 디코딩하려고합니다. 데이터를 패킷 (예 : C 구조)으로 처리하기위한 모든 Get ... 호출을 사용합니다.

필자는 Blob과 Typed Array를 시도해 보았지만, 이제까지 나는 그것이 올바른 것만은 아닌 것처럼 보인다.

var ab = new ArrayBuffer (atob(my_base64_encoded_packet_data) 
var dv = new DataView (ab); 

간단한 : 나는 무엇

후이 같은 것입니다! 아니 내가 가까이 관리해야하는 유일한 방법이 (거의) 같은 파일 리더를 사용하는 것입니다 :

버피는 BLOB이며 newBuf가 ArrayBuffer입니다
fileReader.onload = function () { 
    var newBuf = this.result; 
    callback(newBuf); 
    return; 
}; 
fileReader.readAsArrayBuffer(buf); 

.

내가 원하는 것은 수행하지만 노동 집약적 인 것처럼 보이는 또 다른 접근 방식이 있습니다.

function str2ab(str) { 
    var buf = new ArrayBuffer(str.length); 
    var bufView = new Uint8Array(buf); 
    for (var i=0, var strLen=str.length; i<strLen; i++) { 
    bufView[i] = str.charCodeAt(i); 
    } 
    return buf; 
} 

도움말. 감사합니다

+0

파일 리더 방법 잘 작동한다, 문제가 무엇 방법 페치? –

답변

0

문제는 당신이 jQuery의 아약스를 사용하고 있다는 것입니다. jQuery는 모든 것을 문자열로 만들기 위해 이진을 처리 할 수 ​​없다. 브라우저는 당신이 원하는 것은 그래서 원시 이진 중 하나 arraybuffer이거나 blob 당신이 원하는 것을하는 responseType입니다 그것으로 현명하게 시도하고 텍스트

로 받으려면 응답을 변환하려고합니다.

이 솔루션은 수동으로 XHR을 수행하는 스틱이나 새를 사용 중 하나는

fetch(url, opts).then(res => res.arrayBuffer()).then(buffer => { 
    // code here 
}) 

Sending and Receiving Binary Data - MDN