2016-09-02 2 views
1

WebAPI를 통해 Excel 파일을 다운로드하려고합니다. 기본적으로 Excel 파일은 메모리 스트림을 통해 생성됩니다. PostWebAPI/MVC가 포함 된 Excel 파일 다운로드

Excel 콘텐츠가 잘 생성되지만 크롬 네트워크 도구의 응답 탭에서 응답 자체가 순수 XML이므로 Excel을 다운로드 할 수 없습니다. 다음은 C# 코드입니다.

var sheet = linq.ExportToExcel (userAddedList);

  var stream = new MemoryStream(); 
      var sw = new StreamWriter(stream); 
      sw.Write(sheet); 
      sw.Flush(); 

      var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(stream.GetBuffer()) }; 
      result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Report.xml" }; 
      result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/ms-excel"); 

      var response = ResponseMessage(result); 
      return response; 

그리고 저는 이것을 Angular라고 부릅니다.

var httpRequest = commonFunctions.getRequestObject ("GET", requestURL, {}, null);

 $http(httpRequest).then(function (response) { 
      vm.isProcessing = false; 
     }, function (error) { displayError(error); }); 
+1

당신은 XML 확장을 지정하고, 다음 설정 :

var setFile = function(data, fileName, fileType) { // Set objects for file generation. var blob, url, a, extension; // Get time stamp for fileName. var stamp = new Date().getTime(); // Set MIME type and encoding. fileType = (fileType || "text/csv;charset=UTF-8"); extension = fileType.split("/")[1].split(";")[0]; // Set file name. fileName = (fileName || "ActiveVoice_" + stamp + "." + extension); // Set data on blob. blob = new Blob([ data ], { type: fileType }); // Set view. if (blob) { // Read blob. url = window.URL.createObjectURL(blob); // Create link. a = document.createElement("a"); // Set link on DOM. document.body.appendChild(a); // Set link's visibility. a.style = "display: none"; // Set href on link. a.href = url; // Set file name on link. a.download = fileName; // Trigger click of link. a.click(); // Clear. window.URL.revokeObjectURL(url); } else { // Handle error. } }; 

당신은이 같은 코드의 일부로 사용합니다 콘텐츠 형식을 Excel의 BIFF 버전에 적용합니다. 결과로 정확히 무엇을 기대합니까? http://stackoverflow.com/a/4212908/534109 –

+0

@ TiesonT에서 살펴볼 것입니다. 언급 한 것처럼 나는 방금 게시물의 예를 따랐습니다. 어쨌든, 당신이 제안한대로 xls 및 MIME 형식을 application/vnd.ms-excel로 변경했습니다. AJAX 요청이 없으면 제대로 작동하지만 AJAX와 작동시키는 법을 알고 싶습니다. – programmerboy

답변

1

당신이 지원 당신이 Blob object 사용할 수있는 파일 API 대상으로하는 브라우저합니다. 여기가 this fiddle에서, 함수에 싸여 촬영 :

$http(httpRequest).then(function (response) { 
    vm.isProcessing = false; 
    setFile(response.data, "Report.xls", "application/ms-excel"); 
}, function (error) { displayError(error); }); 
+0

OP를 * 'research/google for javascript solution'*으로 지정하고 타사 라이브러리 데모에 대한 링크 만 제공하는 것은 아닙니다. 완전한 응답이나 대답. 이것은 코멘트 였을 것입니다. – Jeeped

+0

@ 지프 - 업데이트 된 답변이보다 구체적입니다. – mlhDev

관련 문제