有没有办法使用 angular filesaver 下载任何类型的文件?

Is there a way to download any kind of file using angular filesaver?

我正在为我的应用程序使用 node.js 和 angular.js,我正在尝试使用 Blob 和 fileSaver.js.

通过浏览器下载文件

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

例如,我试过下载带有和不带 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 中删除冗余类型定义)