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

时间:2017-06-14 12:36:20

标签: 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标题或其他内容吗?

1 个答案:

答案 0 :(得分:0)

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

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

编辑:从Blob中删除了冗余类型定义)