Blob网址不适用于Android浏览器

时间:2017-08-14 20:09:53

标签: javascript android angularjs pdf asp.net-web-api

我使用.NET(With Entity Framework)和AngularJS创建了一个简单的Web应用程序来检索PDF文件。我可以让应用程序在桌面浏览器和iOS浏览器上完美运行。不幸的是,我遇到了在任何Android浏览器上使用它的问题。

在我的控制器内部是一个功能,通过点击一个请求并显示pdf的简单按钮来触发。我能够使用解决方案here来使PDF在iOS和Edge浏览器上正常工作。

appModule.controller("cellController", ['$scope','$http','$routeParams','$window','$sce', function ($scope, $http, $routeParams,$window,$sce) {
....
$scope.getLayout = function () {
    var attachmentPromise = $http.get("/api/pdf" + $routeParams.ID, { responseType: 'blob' }).then(function (result) {                                    
        var file = new Blob([result.data], { type: 'application/pdf' });
        if (window.navigator.msSaveOrOpenBlob) {
            window.navigator.msSaveOrOpenBlob(file, "Layout.pdf");
        }
        else if (window.navigator.userAgent.match('CriOS')) {
            var reader = new FileReader();
            reader.onloadend = function () { $window.open(reader.result); };
            reader.readAsDataURL(file);
        }
        else if (window.navigator.userAgent.match(/iPad/i) || window.navigator.userAgent.match(/iPhone/i)) {
            var url = $window.URL.createObjectURL(file);
            window.location.href = url;
        }
        else {
            var url = window.URL || window.webkitURL;
            window.open(url.createObjectURL(file));
        }
    });
};
}]);

如上所述,上述代码在桌面和iOS上运行良好,但会在Android上打开空白blob页面,或者无法在Android上下载该文件。

对此有任何建议将不胜感激:)。

如果我能提供任何其他信息,请告诉我

1 个答案:

答案 0 :(得分:0)

我无法根据需要让它工作。作为一种解决方法,如果用户使用Android设备,我只需打开文件地址窗口即可将文档下载到本地存储。我希望这是将来解决的问题。

var attachmentPromise = $http.get("/api/" + $routeParams.ID, { responseType: 'blob' }).then(function (result) {                                    
        var file = new Blob([result.data], { type: 'application/pdf' });
        if (window.navigator.msSaveOrOpenBlob) {
            window.navigator.msSaveOrOpenBlob(file, "Layout.pdf");
        }
        else if (window.navigator.userAgent.match(/Chrome/i) && window.navigator.userAgent.match(/Mobile/i)) {
            window.open("/api/" + $routeParams.ID)
        }
        else if (window.navigator.userAgent.match('CriOS')) {
            var reader = new FileReader();
            reader.onloadend = function () { $window.open(reader.result); };
            reader.readAsDataURL(file);
        }
        else if (window.navigator.userAgent.match(/iPad/i) || window.navigator.userAgent.match(/iPhone/i)) {
            var url = $window.URL.createObjectURL(file);
            window.location.href = url;
        }
        else {
            var url = window.URL || window.webkitURL;
            window.open(url.createObjectURL(file));
        }
    })