2016-07-06 3 views
3

내가 (특정이 될 수있는 PDF) 바이너리 파일을 업로드하기 위해 노력하고있어에서 잘못된 파일이와이 JS-발췌문 :파일 업로드 : 서버

function uploadFile() { 
    var reader = new FileReader(); 
    var file = document.getElementById('uploadInput').files[0]; 
    console.log(file.size); 
    var xhr = new XMLHttpRequest(); 

    xhr.open('POST', 'custom?id=upload'); 
    xhr.setRequestHeader("Content-Type", "application/pdf"); 
    xhr.overrideMimeType('application/pdf'); 
    reader.onload = function(evt) { 
     xhr.send(evt.target.result); 
    }; 
    reader.readAsBinaryString(file); 
} 

을 서버 측에 (자바) 난 요청을 받고 파일을 디스크에 씁니다.
그러나 예상되는 ~ 3MB 대신에 ~ 4MB가 발생합니다. PDF를 열 때 페이지가 비어있는 것뿐입니다.

들어오는 요청의 헤더도 ~ 4MB의 Content-Length를 지정하므로 클라이언트 측에서 문제가되는 것이 상당히 확실합니다.
일반 텍스트 파일을 보내는 것은 전혀 문제가되지 않습니다.

자바 스크립트를 작성하고 웹에서 작업하는 것이 일상적인 일은 아니기 때문에 근본적으로 잘못된 것을 할 가능성이 매우 높습니다.

답변

2

나는 당신이 시도 할 수 2 가지를 생각합니다 :

  • 체크 MIME 타입을 프로세스의 양단에, 그것은 어떻게 든 엉망이됩니다 경우
  • 업로드는 XMLHttpRequest의에 랩됩니다 답변이 - Base64 인코딩/디코딩을 수동으로 수행해야 할 수도 있습니다.

희망이 있으면 행운을 빈다.

0

해결책을 찾았습니다. 데이터를 보내기 전에 명시 적으로 데이터를 인코딩하고 수신 측에서 적절하게 디코딩합니다.

function uploadFile() { 
    var reader = new FileReader(); 
    var file = document.getElementById('uploadInput').files[0]; 
    console.log(file.size); 
    var xhr = new XMLHttpRequest(); 

    xhr.open('POST', 'custom?id=upload'); 
    xhr.setRequestHeader("Content-Type", "text/plain; charset=x-user-defined"); 
    xhr.overrideMimeType('text/plain; charset=x-user-defined'); 
    reader.onload = function(evt) { 
     var encoded = window.btoa(evt.target.result); 
     xhr.send(encoded); 
    }; 
    reader.readAsBinaryString(file); 
} 

나는이 같은 문제를 가지고 사람이, 내 솔루션으로 알려 드리고자합니다.

관련 문제