javascript - 有没有办法使用 Angular 文件保护程序下载任何类型的文件?

标签 javascript angularjs node.js blob filesaver.js

我正在为我的应用程序使用 node.js 和 angular.js,并尝试使用 Blob 和 fileSaver.js 通过浏览器下载文件。

我在应用程序的其他部分中使用了这些来下载文本文件和 pdf 文件,在创建 Blob 对象时指定了正确的类型,没有任何问题,但在当前部分中我需要支持任何类型的文件,但我不这样做不知道可不可以。

例如,我尝试下载带有或不带有 type:image/png 的图像文件,结果是图像损坏 - 在文本编辑器中检查它并将其与原始文件进行比较显示许多字节已更改。

以下是我使用的代码片段:

服务器:

fs.readFile(/* snipped file path */, function(err, data){
    if(err){
        /* handle error */
    }
    else{
        res.send(data);
    }
});

客户:

$http.get(/* endPoint URL */)
    .success(function(result){
        var data = new Blob([result], {type: 'image/png'});
        FileSaver.saveAs(data, filename);
    });

几个问题:

  1. 我需要指定 Blob 的类型吗?如果是这样,我是否也需要在服务器上指定它(确定它很痛苦)?我不能在两端都跳过它吗?
  2. 什么原因导致图像测试导致文件损坏?我是否缺少一些 content-type header 或其他内容?

最佳答案

尝试将 {contentType: 'arraybuffer'} 添加到您的 GET 请求中并从 Blob 定义中删除类型,如下所示:

$http.get(/* endPoint URL */, {contentType: 'arraybuffer'})
  .success(function(result){
      var data = new Blob([result]);
      FileSaver.saveAs(data, filename);
  });

(编辑:从 Blob 中删除了多余的类型定义)

关于javascript - 有没有办法使用 Angular 文件保护程序下载任何类型的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44544999/

相关文章:

javascript - 如何从TinyMCE获取高亮文本?

javascript - 尝试获取表行计数值,但转换结果时出错 java.lang.NullPointerException : lock == null

javascript - 为什么会产生auth.js :65 Uncaught (in promise) TypeError: Cannot read property 'data' of undefined?

javascript - 将 limitTo 与 ng-bind 一起使用

javascript - 使用 node.js 和自然语言处理来处理多个词组

javascript - Javascript 中的所有 RGB 颜色组合

javascript - AngularJS - 如何使用 "require"在指令中获取指令 Controller

javascript - AngularJS 中是否有 ng-bind-html-unsafe 的回调

node.js - Sails.js 静态 html 渲染器

javascript - 如何替换javascript中的空格?