1

我使用的春季会议上产生的,以保持通信的x-auth-token当访问受保护的静态文件,这是罚款AJAX requests.I有一个问题,虽然,我是当前文件被ajax提取。使用X-auth的令牌

这些文件是用户上传的内容,PDF文件,HTML CSS和字体,基本的东西,浏览器可以渲染,所以要实现AJAX力下载按钮是不是一种选择(尽管也许有办法做到这一点,以查看它们我没有想到)。目前它们只是通过<a href链接被浏览器GET请求,因此不包含标题。

我正在使用AngularJS。解决此问题的最佳方法是什么?

回答

0

我知道这个问题已经过去几个月了,但是当我第一次使用Spring Session的时候,我遇到了AngularJS的这个问题。这有点冒险,但它基本上使用AngularJS的HTTP来检索文档并将其保存在浏览器的BLOB中。然后,通过指向BLOB的链接创建隐藏的<a>标记,并以编程方式点击链接。我有一个名为“saveBlob”的AngularJS服务,处理这样的:

app.service('saveBlob', ['$http', function ($http) { 
return { 
    download: function(url, fileName) { 
     $http.get(url, { responseType: 'arraybuffer' }).then(function(response) { 
      var blob = new Blob(
        [ response.data ], 
        { type: response.headers('Content-Type') } 
       ); 
      var objUrl = window.URL.createObjectURL(blob); 
      var a = document.createElement("a"); 
      document.body.appendChild(a); 
      a.style = "display: none"; 
      a.href = objUrl; 
      if (fileName) { 
       a.download = fileName; 
      } 
      else { 
       var regex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/g; 
       var match = regex.exec(response.headers('Content-Disposition')); 
       var fn = match[1]; 
       a.download = fn.substring(1, fn.length - 1); 
      } 
      a.click(); 
      window.URL.revokeObjectURL(url); 
     }); 
    } 
} 
}]); 

的“saveBlob”服务,然后通过一个名为“httpHref”指令称为:

app.directive('httpHref', ['$http', 'saveBlob', function ($http, saveBlob) { 
return { 
    link: function ($scope, elem, attrs) { 
     function revokeObjectURL() { 
      if ($scope.objectURL) { 
       URL.revokeObjectURL($scope.objectURL); 
      } 
     } 

     $scope.$watch('objectURL', function (objectURL) { 
      elem.attr('href', objectURL); 
     }); 

     $scope.$on('$destroy', function() { 
      revokeObjectURL(); 
     }); 

     attrs.$observe('httpHref', function (url) { 
      elem[0].onclick = function() { 
       saveBlob.download(url); 
      }; 
     }); 
    } 
}; 
}]); 

我改编自This GitHub Repository这个代码(这是根据麻省理工学院许可证授权的),所以非常感谢该项目的贡献者帮助我完成这一任务!

+0

可能对某人有用,我最终迁移到Aurelia,但我确信我可以找到一种方法将其转换为aurelia/fetch api – xenoterracide