为了账号安全,请及时绑定邮箱和手机立即绑定

二进制文件损坏-如何下载带有AngularJS的二进制文件

二进制文件损坏-如何下载带有AngularJS的二进制文件

哔哔one 2019-07-02 14:35:12
二进制文件损坏-如何下载带有AngularJS的二进制文件下载任何文件使用ResponseEntity与角不工作我需要下载一个文件使用角在客户端,这个文件可以有任何格式,它可以是一个pdf或Excel,图像或txt.我的方法只适用于txt文件,给出了Excel和图像的失败格式,而对于pdf,它给出了一个空的pdf。因此,在我的控制器中,有一个调用服务方法的函数:    vm.downloadFile = downloadFile;     function downloadFile(file){         var urlDir = "C://STCI//"+idpeticion;         return VerDocServices.downloadFile(file,urlDir)           .then(function(response) {             var data = response.data;             var filename = file;             var contentType = 'application/octet-stream';//octet-stream                          var linkElement = document.createElement('a');             try {                 var blob = new Blob([ data ], {                     type : contentType                });                 var url = window.URL.createObjectURL(blob);                 linkElement.setAttribute('href', url);                 linkElement.setAttribute("download", filename);                 var clickEvent = new MouseEvent("click", {                     "view" : window,                     "bubbles" : true,                     "cancelable" : false                 });                 linkElement.dispatchEvent(clickEvent);             } catch (ex) {                 console.log(ex);                 throw ex;             }         }).catch(function(response) {             alert('Se ha producido un error al exportar del documento');             console.log(response.status);             throw response;         });     }我的服务处有:angular.module('mecenzApp').service('VerDocServices',['$http',function($http) {this.downloadFile = function(file,urlDir) {     return $http.get('api/downloadFile', {         params : {             file : file,             urlDir : urlDir        }     }); }} ]);请你看一看,告诉我错过了什么吗?谢谢:)
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

如何使用AngularJS下载二进制文件

下载二进制文件时,设置responseType:

app.service('VerDocServices',['$http',function($http) {

    this.downloadFile = function(url, file, urlDir) {
        var config = {
            //SET responseType
            responseType: 'blob',
            params : {
                file : file,
                urlDir : urlDir            }
         };

        return $http.get(url, config)
          .then(function(response) {
            return response.data;
        }).catch(function(response) {
            console.log("ERROR: ", response.status);
            throw response;
        }); 
    }; }]);

如果responseType省略xhrapi默认为转换。乌特夫-8编码文本DOMString(UTF-16)这将破坏PDF、图像和其他二进制文件。

有关更多信息,请参见MDN Web API引用-XHR响应类型


查看完整回答
反对 回复 2019-07-02
  • 2 回答
  • 0 关注
  • 683 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信