2016-08-29 2 views
0

안녕하세요, 나는 웹 서버에서 base64url "JVBERi0xLjMKMSAwIG9iago8...mVmCjM3MjgxCiUlRU9GCg=="
를 수신하고 있고 나는 덩어리에이 문자열을 변환하고 아래 코드를 사용하여 브라우저에 표시 할 수 있어요.PDF 표시는

$scope.pdfUrl = window.URL.createObjectURL(currentBlob);

그것은 브라우저에서 작동하지만 그것은 전화에 실패

.controller("formB", function() { 
$scope.formb.year = ["2015"+"\/"+"2016", "2016"+"\/"+"2017"]; 
$scope.formb.semester = [1,2,3]; 
$scope.formb.pdf =""; 

setDefaultsForPdfViewer($scope); 
// Initialize the modal view. 
$ionicModal.fromTemplateUrl('src/app/components/form_b/pdf-viewer.html', { 
    scope: $scope, 
    animation: 'slide-in-up' 
}).then(function (modal) { 
    $scope.modal = modal; 
}); 
$scope.openModal = function() { 
    $scope.modal.show(); 
    }; 
$scope.$watchGroup([ 
'formb.year.selected', 
'formb.semester.selected' 
],function(newVals, oldVals){ 

    if(newVals[0]&&newVals[1]&&newVals!==oldVals){ 
      $ionicLoading.show({ 
      template:'Loading...' 
       }).then(function(){ 
      }); 

    DataFactory.getFormB(newVals[0],newVals[1]).then(function(resp){ 
      $scope.formb.pdf = resp.data.data; 
    var str = resp.data.data; 
    currentBlob = myB64ToBlob(str,"application/pdf"); 

    $ionicLoading.hide().then(function(){ 
    console.log("No more loading"); 
     }); 

    $scope.pdfUrl = window.URL.createObjectURL(currentBlob); 

      // Display the modal view 

      }); 
    } 

    }); 

    // Clean up the modal view. 
    $scope.$on('$destroy', function() { 
    $scope.modal.remove(); 
    }); 
    function base64ToUint8Array(base64) { 
    var raw = atob(base64); 
    var uint8Array = new Uint8Array(raw.length); 
    for (var i = 0; i < raw.length; i++) { 
    uint8Array[i] = raw.charCodeAt(i); 
    } 
    return uint8Array.buffer; 
    } 
    function myB64ToBlob(base64,contentType){ 
    var arr = base64ToUint8Array(base64); 

    var blob = new Blob([arr], {type: contentType}); 
    return blob; 
    } 
    ... 
     } 

여기서 중요한 것은 여기이 선입니다. 나는 정말로 혼란스럽고 나는 무슨 일이 일어나고 있는지 알아낼 수 없다. 누구든지 도와 줄 수 있습니까?

답변

1

JS 고유 기능을 사용하여 URL을 만들고이를 범위에 전달하십시오. 전화로 창을 사용할 수 없습니다.

objectURL = URL.createObjectURL(blob); 

읽어보기 https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

모바일 용으로는 ng-cordova 파일 플러그인을 사용해야합니다. 여기를 참조하십시오 https://github.com/apache/cordova-plugin-file

+0

작동하지 않았습니다. 브라우저에서만 계속 작동합니다. – TheEYL

+0

답변이 업데이트되었습니다. 모바일에서 파일 작업을하려면 ng-cordova 파일 플러그인을 사용해야합니다. –