javascript - 如何使用 angular post 从 Internet Explorer 中的 webapi 下载文件?

标签 javascript angularjs

我正在使用 angularjs http post 在单击按钮时从 Web Api 下载文件。我的代码在 Google Chrome 和 Firefox 中运行良好,但在 Internet Explorer 中不起作用。这是我的代码

$scope.CallApi = function () {
        $http({
            url: some url,
            dataType: 'json',
            method: 'POST',
            data: null,
            responseType: 'arraybuffer',    

        }).success(function (responsedata, status, xhr) {           
            var file = xhr('Content-Disposition');
            console.log(file); 
            var filename = file.substr(21, 7);
            $scope.value = responsedata;
            var fileName = filename;
            var blob = new Blob([responsedata], { type: "application/octet-stream" });
            var url = URL.createObjectURL(blob);
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            a.href = url;
           a.download = fileName;        

        }).error(function (error) {
                alert("Error Found" + " : " + error);
            });
    };

以上代码在 IE 中不工作,我不想使用 FileSaver.js 扩展名有没有其他方法可以在 Internet Explorer 中从 api 下载文件。下面我附上了我在 Internet Explorer 中遇到的错误的屏幕截图.... enter image description here 提前谢谢你......

最佳答案

这是一种在 IE 中下载的方法

  if (window.navigator.msSaveOrOpenBlob){
      // base64 string
      var base64str = response;
      // decode base64 string, remove space for IE compatibility
      var newstr =base64str.replace(/\s/g, '');
      var binary = atob(newstr);
      // get binary length
      var len = binary.length;
      // create ArrayBuffer with binary length
      var buffer = new ArrayBuffer(len);
      // create 8-bit Array
      var view = new Uint8Array(buffer);

      // save unicode of binary data into 8-bit Array
      for (var i = 0; i < len; i++) {
        view[i] = binary.charCodeAt(i);
      }

      // create the blob object with content-type "application/csv"               
      var blob = new Blob( [view], { type: mimeType });
      window.navigator.msSaveOrOpenBlob(blob, "Name your file here");
}

此处 mimeType 对您来说是 application/octet-stream,response 是您的 base64 字符串。

关于javascript - 如何使用 angular post 从 Internet Explorer 中的 webapi 下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965807/

相关文章:

javascript - while循环仅在本地打开网页时有效

javascript - 从 Jar 存档中将 JavaScript 作为静态资源返回

javascript - Angular JS | Angular 验证匹配密码

javascript - AngularJS 中的刷新 Controller

javascript - grunt-bower-task 正在从 Bower_components 中删除 CoffeeScript,然后提示它丢失了

java - 设置 javascript 文件的版本。 Java EE + Tomcat

javascript - ui 路由器中的 Angular Provider 访问

javascript - 如何防止 CSS3 转换使元素不可点击

javascript - 用于组件之间通信的 AngularJS 方法?

javascript - 使用 Javascript 从远程端点将 html 内容附加到 div 中