在angularjs中使用FileSaver和Blob时获取损坏的Word文档

时间:2016-04-21 09:55:23

标签: javascript angularjs blob filesaver.js

我正在使用角文件保护服务https://github.com/alferov/angular-file-saver来下载文件。下载是好的,但是当我尝试打开word文档时,我发现文件已损坏而且单词无法打开它,如果将我的api直接放在浏览器文件中是好的,当我打开它时所以我想blob正在为这个问题做些事...... .txt文件我没有被破坏它只适用于.docx和.jpeg或.png。下面是我下载文件的简短代码。

function downloadDocument(fileId, fileName, documentExt) {
            var deferred = $q.defer();

            var id = encodeURIComponent(fileId);
            Restangular.one('download?fileId=' + id).get().then(function(data) {
                var file = new Blob([data]);
                if (documentExt && documentExt !== 'undefined') {
                    FileSaver.saveAs(file, fileName + '.' + documentExt);
                }
                else {
                    FileSaver.saveAs(file, fileName);
                }
            });

            return deferred.promise;
        }

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码来保存文件 -

function downloadDocument(fileId, fileName, documentExt) {
            var deferred = $q.defer();

            var id = encodeURIComponent(fileId);
            Restangular.one('download?fileId=' + id).get().then(function(data) {
                // try to use data.data or data in blob object
                 var file = new Blob([data.data], {
                    type: 'application/octet-binary'
                });
                var fileUrl = URL.createObjectURL(file);
                // for IE 10+
                if (window.navigator.msSaveOrOpenBlob) {
                    window.navigator.msSaveOrOpenBlob(file, fileName+'.'+documentExt);
                } else {
                    var element = document.createElement('a');
                    element.href = fileUrl;
                    element.setAttribute('download', fileName+'.'+documentExt);
                    element.setAttribute('target', '_blank');
                    document.body.appendChild(element); 
                    element.click();
                }
            });

            return deferred.promise;
        }