2013-10-24 1 views
0

javacript에서 sendAsBinary() 함수가 필요하지만 Chrome에서 기본적으로 제거한 것으로 보입니다. 난 아직도 얻고, 나는 위의 구현에도 불구하고, 그러나자바에서 XMLHttpRequest.sendAsBinary() 지원

if(!XMLHttpRequest.prototype.sendAsBinary) { 
    XMLHttpRequest.prototype.sendAsBinary = function(sData) { 
     console.log("calling sendAsBinary() method...");  
     var nBytes = sData.length, ui8Data = new Uint8Array(nBytes); 
     for(var nIdx = 0; nIdx < nBytes; nIdx++) { 
      ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff; 
     } 
     this.send(ui8Data); 
    }; 
} 

: 모질라 MDN (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)에, 그들은 XMLHttpRequest의 프로토 타입을 확장하는 사용자 정의 기능을 제공 Chrome 30.0.1599.101에서

Uncaught TypeError: Object #<XMLHttpRequest> has no method 'sendAsBinary' 

합니다. 나는 또한 내 console.log() 메시지를 보지 못한다.

+0

재생산 할 수 없습니다. '모든 새로운 XMLHttpRequest' 객체는 여러분이 지정한대로'sendAsBinary' 메소드를 가지고 있습니다. 크롬 30 – Brian

답변

1

Chrome에서는 sendAsBinary 대신 FormData 객체와 send 메소드를 사용할 수없는 것으로 보입니다. 파일을 업로드하려고한다고 가정합니다.

var file = event.originalEvent.dataTransfer.files[0]; 
    var dashes = '--'; 
    var boundary = 'fuhtml5'; 
    var crlf = '\r\n'; 
    if (file.getAsBinary) { // Firefox 
      var data = dashes + boundary + crlf + 
       "Content-Disposition: form-data;" + 
       "name=\"" + settings.name + "\";" + 
       "filename=\"" + unescape(encodeURIComponent(file.name)) + "\"" + crlf + 
       "Content-Type: application/octet-stream" + crlf + crlf + 
       file.getAsBinary() + crlf + 
       dashes + boundary + dashes; 

      xmlHttpRequest.setRequestHeader("Content-Type", "multipart/form-data;boundary=" + boundary); 
      xmlHttpRequest.sendAsBinary(data); 

     } else if (window.FormData) { // Chrome 

      var formData = new FormData(); 
      formData.append(settings.name, file); 

      xmlHttpRequest.send(formData); 

     } 

이것은 테스트되지 않았습니다. 코드에서 추출했습니다 https://github.com/MicheleBertoli/jquery-html5-uploader/