2016-12-09 3 views
2

이것은 여러 이미지가 포함 된 PDF를 반환하는 API입니다. 이제 URL을 사용하여이를 호출하면 이미지가있는 PDF가 완벽하게 다운로드됩니다. 예를 들어 이미지가있는 두 페이지의 경우. 이제 blob 및 WebAPI가있는 각도 파일 세이버. 다운로드 한 PDF가 비어 있습니다. 하지만 API url은 콘텐츠가있는 PDF를 반환합니다.

[HttpGet] 

    public async Task<IHttpActionResult> Download(Guid customDocId) 
    { 

        byte[] responseContent = await Task.FromResult(FileNetApiClientFactory.Get(customDocId).DownloadDocument(customDocId, "pdf", true)); 
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK) 
        { 
         Content = new ByteArrayContent(responseContent), 
         StatusCode = HttpStatusCode.OK, 
        }; 
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = string.Concat(customDocId.ToString(), ".pdf") }; 
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 
        return ResponseMessage(response); 

      } 

는 각도에서 나는 PDF를 저장하기위한 BLOB 및 FileSaver을 사용하고 있습니다. 그래서 내가 그것을 다운로드 할 때. 그런 다음 내용이없는 두 페이지 만 반환합니다. 그러나 페이지 1과 페이지 2를 보여 주지만 그들은 비어 있습니다.

//saveAs method is from FileSaver.js 
     vm.download = function() { 
      documentService.download($scope.customDocumentId).then(function (fileData) { 
       var blob = new Blob([fileData], { type: 'application/pdf' }); 
       saveAs(blob, $scope.customDocumentId + ".pdf"); 
      }).catch(function() { 

      }); 
     } 

그리고 서비스 : 여기

내 각 코드

function _download(customDocumentId) { 
      return Restangular 
       .one('customdocument', customDocumentId).one('download') 
       .get(null, { responseType: 'arraybuffer' }); 
     } 

FileSaver로 저장할 때 누군가가, 왜 빈 페이지를 반환 어떤 생각을 가지고 있습니까 직접 다운로드와 동안 모든 콘텐츠와 완벽하게 잘 어울립니다.

답변

1

입니다. responseTypearrayBuffer 또는 'blob'이어야했습니다. 나는 arrayBuffer를 명시 적으로 시도하지 않았다. blob responsetype이 나를 위해 일했습니다. 구성이 구형에서 빠졌습니다. 그래서 나는 내 봉사와 환락을 조금 바꾸었다! 그것은 일하고 있었다.

업데이트 된 서비스는 이제 이와 같습니다. DocumentServicesRestangular는 RestangularConfigurer를 통해 변경된 기저부가있는 팩토리 래퍼 일뿐입니다.

return $http.get(apiTarget, { responseType: 'blob' }); 
0

당신이 FileSaver를 사용하는 경우 다음이 내가 Restangular 특정 상황을 타개했다 올바른 구문

var data = new Blob([response], { type: 'application/pdf;charset=utf-8' }); 
FileSaver.saveAs(data, filename); 
+0

내 문제를 해결 didnt는 : 응답 유형을 설정 인수에 설정하도록

function _download(customDocumentId) { return DocumentServicesRestangular.one('customdocument', customDocumentId).one('download') .withHttpConfig({ responseType: 'blob' }).get(); } 
Joy

+0

) 내 응용 프로그램 FileSaver.saveAs()가 거기에 있지 않습니다. 그 이유는 확실하지 않습니다. FileSaver.min.js를 사용하고 있습니다. – Joy

1

이 같이 시도

$scope.download = function() { 
    var a = document.createElement("a"); 
    document.body.appendChild(a); 
    var requestParams=$scope.downloadObj; 
    a.style = "display: none"; 
    sServices.doAPIRequest(Url) 
     .then(function(generateData) { 

      var file = new Blob([$scope.base64ToArrayBuffer(generateData)], { 
       type : 'application/pdf' 
      }); 
      var fileName="Data"; 
      var fileURL = URL.createObjectURL(file); 
      a.href = fileURL; 
      a.download = fileName; 
      a.click(); 
     }); 
}; 

$scope.base64ToArrayBuffer=function(data) 
{ 
     var binaryString = window.atob(data); 
     var binaryLen = binaryString.length; 
     var bytes = new Uint8Array(binaryLen); 
     for (var i = 0; i < binaryLen; i++)  { 
      var ascii = binaryString.charCodeAt(i); 
      bytes[i] = ascii; 
     } 
     return bytes; 
}; 
+0

나는 다운로드 속성이 모두 허용되지 않는다고 생각합니다. 브라우저를 사용하지 않으려 고 시도하는 이유입니다. – Joy

0

나는, 내 서비스에서 $ http.get를 호출을 변경하여이 문제를 해결했습니다. 여전히 빈 페이지가있는 PDF가 반환됩니다 : (