以PDF格式保存/下载二进制文件(缓冲区?)

时间:2016-11-29 02:17:10

标签: angularjs mongodb pdf hapijs

用户将pdf文件上传为 mongo 作为二进制文件,文件尺寸较小(<1mb),因此我没有使用 GridFS

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

一样
res(binaryMongoPDF).code(200);

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

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

我尝试过将responseType设置为arraybuffer,然后将其设置为<{1}}:

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

然后让用户下载它,我用Angular FileSave简化了这一点,但我也尝试使用vanilla标记创建方法:

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

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

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

1 个答案:

答案 0 :(得分:0)

如果服务器将文件作为数据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);
     });
  };
});

使用数据

设置href标记的<a>属性
<a download="data_{{files[0].name}}" xd-href="data">
  <button>Download data</button>
</a>

DEMO on PLNKR