【问题标题】:Is there a way to download any kind of file using angular filesaver?有没有办法使用角度文件保护程序下载任何类型的文件?
【发布时间】:2017-11-16 14:51:43
【问题描述】:

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

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

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

这是我使用的代码 sn-ps:

服务器

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 标头或其他内容?

【问题讨论】:

    标签: javascript angularjs node.js blob filesaver.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!它适用于我尝试过的所有类型的文件。创建 Blob 对象时也不需要指定类型。
    猜你喜欢
    • 2017-07-21
    • 2020-04-02
    • 2011-07-24
    • 2018-08-22
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2013-08-05
    • 2023-02-07
    相关资源
    最近更新 更多