【发布时间】:2017-05-15 05:56:11
【问题描述】:
我的 Web 应用程序正在向外部 API 发出 HTTPS GET 请求。我收到的是一个 PDF 文件,其开头为:
%PDF-1.4
我想做的是将此 PDF 保存在服务器上,以便将此文件提供给客户端。问题是 PDF 中有一些空白页应该没有。
这是负责检索 PDF 并将其保存到服务器的代码:
Meteor.http.get('url/' + chartId, {
headers: {
Authorization: 'Bearer ' + key.token
}
}, function(err, result) {
if(!err) {
var fs = Npm.require('fs');
var path = process.env['METEOR_SHELL_DIR'] + '/../../../public';
fs.writeFile(path + "/charts/" + Meteor.userId() + '.pdf', result.content, (function (err) {
if (err) {
console.log("Error:" + err);
}
}));
} else {
throw new Error('Error from API getting documents');
}
});
奇怪的是,我保存到服务器的 PDF 显示带有文本的页面,但在应该有图像(图表)的地方显示空白页面。也许这是一个编码问题?
【问题讨论】:
-
result.content是否可以将内容作为字符串返回?在这种情况下,您将不得不寻找一个不同的属性,将其作为原始字节返回。 -
@mkl
result.content确实返回一串字符。不幸的是,这是我可以从响应中获得的唯一数据。有没有办法从这个字符串中获取原始字节? -
将二进制文件解释为文本通常是破坏性的,即不可逆的。由于我对 Javascript 尤其是 Meteor 不太了解,因此我不知道手头的情况是否是一个例外。
-
@mkl 我想我找到了问题所在。如果我下载原始且正确的 pdf 并在文本编辑器 (Atom) 中打开并保存它。它导致一个空白页。我认为当我尝试获取 HTTPS 内容结果并将其保存到文件或将其发送到客户端时,也会发生同样的事情。你知道这个问题的任何解决方法吗?
标签: node.js pdf meteor encoding fs