【问题标题】:Saving/downloading binary (buffer?) as a pdf将二进制文件(缓冲区?)保存/下载为 pdf
【发布时间】:2017-04-12 21:49:47
【问题描述】:

用户上传保存到 mongo 的 pdf 文件作为二进制文件,文件很小 (GridFS。

如何将pdf下载回来? 这是我尝试过的: 我正在从 mongo 中提取二进制文件并将其发送回用户。我正在使用 Hapi,将其发送回去就像

res(binaryMongoPDF).code(200);

我在客户端接收到存储在 mongo 中的相同数据。根据我所阅读的内容,我应该将二进制文件转换为 blob:

var blob = new Blob([data], { type: 'application/pdf' });

我尝试过将responseType 设置为arraybuffer

$http.get(API_URL + "/cv/me", {responseType:'arraybuffer'})

然后让用户下载它,我正在使用Angular FileSave 简化它,但我也尝试过使用香草创建标签的方法:

FileSaver.saveAs(r, 'text.pdf');

我返回的文件无法以 pdf 格式打开。

我观察到我在 mongo 中保存的二进制文件的大小为 73262,但 blob 的大小为 97426。我不知道这是否正常。

【问题讨论】:

  • API 响应的 Content-type 标头是什么?
  • @georgeawg 无需我手动设置 - "application/json; charset=utf-8"。将其设置为 "application/pdf" 不会改变任何内容。
  • 我也有同样的情况。找到解决方案了吗?

标签: angularjs mongodb pdf hapijs


【解决方案1】:

如果服务器将文件作为数据url返回:

data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgA

使用这个指令:

angular.module("myApp").directive("xdHref", function() {
  return function linkFn (scope, elem, attrs) {
     scope.$watch(attrs.xdHref, function(newVal) {
       newVal && elem.attr("href", newVal);
     });
  };
});

用数据设置<a>标签的href属性:

<a download="data_{{files[0].name}}" xd-href="data">
  <button>Download data</button>
</a>

DEMO on PLNKR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2022-12-18
    • 2010-09-19
    • 2011-07-05
    • 2013-05-20
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多