2014-03-26 3 views
0

파일 및 기타 데이터를 업로드하고 구문 분석 한 다음 xls 형식으로 다운로드하는 ajax 요청이 있습니다. 현재 업로드 파일을 아약스와 함께 올리면 성공 함수가 호출되면 이진 데이터가 매개 변수 '데이터'로 수신됩니다. 이 데이터를 가져 와서 파일을 만들고, 다운로드 한 것처럼 사용자에게 제시하고 싶습니다. 이것이 가능한가? 여기 내 아약스 요청입니다.Ajax 요청 이진 데이터를 수신합니다.

$("#fileForm").submit(function(){ 
    var fileData = $("#fileInputElmt").prop("files")[0]; 
    var data = new FormData(); 
    data.append("upload",fileData); 
    var url = "process.action?" + $("#fileForm").serialize(); 
    console.log(url); 
    console.log(data); 
    $.ajax({ 
     type: "POST", 
     url:url, 
     data:data, 
     cache:false, 
     contentType:false, 
     processData:false, 
     success:function(data){ 
      console.log("success"+data); 
      hideProgressBar(); 
     },error:function(data){ 
      console.log("error "+data); 
      hideProgressBar(); 
     } 
    }); 
    return false; 
}); 

답변

1

당신은 이와 비슷한 것을 찾고 있습니다.

function downloadPDF() { 

var xhr = new XMLHttpRequest(); 
xhr.open('POST', API_URL, true); 
xhr.responseType = 'arraybuffer'; 

xhr.onload = function(e) { 
    if (this.status == 200) { 
     var bb = new window.WebKitBlobBuilder(); 
     bb.append(this.response); // Note: not xhr.responseText 

     var blob = bb.getBlob('application/pdf'); 
     var blobURL = window.webkitURL.createObjectURL(blob); 

     window.open(blobURL); 
    } 
}; 

xhr.send(createRequest()); 
} 

는 새로운 브라우저, 크롬 IE9 + 등 ...

예제 사용자에게 XHR에서 작동하지만 아약스 호출이 바이너리를 반환하는 경우 당신은 유사한 일을 할 수 있어야합니다.