2013-07-09 3 views
3

browserify를 사용하여 로컬 이진 파일에 액세스하려고합니다. 즉, 이진 파일은 사용자 컴퓨터에있는 javascript 파일과 같은 디렉토리에 있습니다. 나는 성공하지 못했다.javascript에서 browserify를 사용하여 이진 파일을 읽는 중

~) 내가 FS가 작동하지 않습니다 알고 ...
0 개)가 필요하여 시도 ('HTML')하지만 '아약스이 브라우저에서 지원되지 않습니다'라고 : 여기에 내가 시도거야 내가 알고있는 [나는 크롬을 사용하고있다. 그러나 나는 크롬과 거의 같은 것이라고 생각한다.]

1) 'browser-request'을 사용해 보았습니다. 바이너리 파일을 문자열로 읽습니다. 'request'을 기반으로하므로 encoding : null을 포함하여 옵션을 구성 할 수 있어야합니다. 모든 문제를 해결할 수 있지만 ... source code을 보면 인코딩 옵션이 지원되지 않습니다. 선물. 심지어 경고.

2) 'html'모듈을 필요로하는 xmlhttprequest를 사용했습니다 ... 다시 0과 동일한 오류가 발생합니다. 이상하게도 '브라우저 요청'에서이 모듈을 사용하고 작동합니다 ... 나는 절대적으로 이유를 모른다.

3)이 시점에서, 나는 html5 파일 시스템 지원을 조사했다. 그것은 작동하지만 사용자가 파일을 지정하는 것을 원하지는 않습니다 ... 실제로는 버퍼를 메모리로 가져오고 싶습니다. 파일에 액세스 할 수있는 다른 방법이 있습니까? 아마도 크롬을 시작할 때 --allow-file-access를 사용할 것인가?

4) 다른 모든 방법이 실패하면 코드를 버퍼에 넣기 만하면됩니다. 나는 쉘에서 노드를 사용하여 파일을 메모리에 읽어들이는 결과를 붙여 넣을 수 있다고 생각합니다 ...

전혀 희망이 있습니까?

+0

지역별로 무엇을 의미합니까? 동일한 도메인에 있습니까? 사용자의 컴퓨터에서? 다른 것? – user2357112

+1

사용자 컴퓨터에서 index.html과 같은 디렉토리에있는 javascript와 동일한 디렉토리에 있습니다. – user968420

답변

0

동적 사용이 아닌 경우 brfs 변형.

+0

여전히 버퍼가 아닌 문자열이됩니다. 따라서 인쇄 할 수없는 모든 문자는 파일이 바이너리 인 경우 손실됩니다. – Vanuan

1

여기에 다소 작동 내용은 다음과 같습니다

function toArrayBuffer(buffer) { 
    var ab = new ArrayBuffer(buffer.length); 
    var view = new Uint8Array(ab); 
    for (var i = 0; i < buffer.length; ++i) { 
     view[i] = buffer[i]; 
    } 
    return ab; 
} 


// node: readFileSync + toArrayBuffer 
// browser: ajax http request 
function readFile(filename, doneCb) { 
    var isNode = 
    typeof global !== "undefined" && 
    global.toString() == '[object global]'; 
    if (isNode) { 
    var fs = require('fs'); 
    var buffer = fs.readFileSync(filename); 
    buffer = toArrayBuffer(buffer); 
    doneCb(buffer); 
    } else { 
    var http = require('http'); 
    var buf; 
    var req = http.get({ path : '/'+ filename }, function (res) { 
     res.on('data', function (chunk) { 
     buf = chunk; 
     }); 
     res.on('end', function() { 
     doneCb(buf); 
     }); 
    }); 
    req.xhr.responseType = 'arraybuffer'; 
    } 
} 

그것은 서버가 필요하고 나는 그것이 testling에서 작동하도록하는 방법으로 strugging하고있다. 내가 생각할 수있는

또 다른 방법은 base64 인코딩으로 BRFS을 사용하는 것입니다

var base64 = fs.readFileSync('file.bin', enc='base64'); 
var buf = new Buffer(base64, 'base64'); 
var ab = toArrayBuffer(buf); 

그것은 간단하지만 동적하지 않고 자체에 포함 된 기능에 리팩토링 할 수 없습니다.

관련 문제