2015-01-19 3 views
3

HTML5 파일 Api (현재 알파로 표시) [0]을 라이브러리로 구축하여 이진 내용으로 작동하도록하고 문자 세트에 문제가 없는지 확인합니다. , 나는 Buffer [1] 유틸리티를 사용하고있다.HTML5 BLOB 객체에서 base64 인코딩을 사용하는 방법

그러나 HTML5 File API는 Blob 네이티브 개체를 사용합니다. 사실 저는 'application/octet-stream'유형과 'Buffer encoding'에서 'binary'유형을 사용하고 있습니다. 그러나, 나는 어떤 문제를 방지하기 위해 64 기수를 사용하려면 :

CoFS.prototype.writeFile = function (fileName, data, encoding, callback) { 

    var self = this; 

    if (Buffer.isBuffer(data)) { 
     callback = encoding; 
     encoding = undefined; 
    } else { 
     data = new Buffer(data, encoding); 
    } 

    this._ifready(function() { 

     self.getFileEntry(fileName, {create: true, exclusive: true}, function (err, fileEntry) { 

      if (err) return callback(new Error("Error getting file access " + err.message)); 

      fileEntry.createWriter(function(fileWriter) { 

       fileWriter.onwriteend = function() { 
        callback(null); 
       }; 

       fileWriter.onerror = function(e) { 
        callback(new Error(e.toString())); 
       }; 

       var blob = new Blob([data.toString('binary')], {type: 'application/octet-stream'}); 

       fileWriter.write(blob); 

      }, function() { 
       callback(new Error('Error writing ' + fileName)); 
      }); 
     }); 

    }); 

}; 

가 Exacts :

var blob = new Blob([data.toString('binary')], {type: 'application/octet-stream'}); 

은 내가 MDN 페이지 [2] 빨간색하지만 난 인코딩에 대해 아무것도 보지 않았다.

처럼 뭔가?

var blob = new Blob([data.toString('base64')], {type: 'application/octet-stream', encoding: 'base64'}); 

감사합니다를 달성 할 수있는 방법이 있습니까.

+1

이진 데이터를 파일에 쓰는 것이 목적이라면 문자열 대신 바이트 배열을 사용해야합니다. – Musa

+0

글쎄, Buffer 객체가 Int8Array라는 것을 깨달았습니다 : D – Exos

답변

4

https://developer.mozilla.org/en-US/docs/Web/API/Blob 나는 버퍼 오브젝트가 Int8Array에서 확장 실현, 둘 다 호환됩니다.

내 코드는 지금 :

var blob = new Blob(
    [data], // Data is a buffer! 
    { 
     type: 'application/octet-stream' 
    } 
); 

fileWriter.write(blob); 

그리고 읽기

, 나는 readAsArrayBuffer 방법을 사용하여, 당신은 할 수 있습니다 :

var d = new Int8Array(arr); // When arr is arrayBuffer 
var buf = new Buffer(d); // And works! 

이 내 문제를 해결.

var blob = new Blob(
    [new Buffer(cleanData, 'base64')], 
    { 
     type: 'application/octet-stream' 
    } 
);