我正在构建一个node-webkit应用程序,我从网站收到下载特定文件的请求。当我启动Web服务调用时,我会在response.body中找回该文件。我正在尝试使用fs api中的示例将pdf保存到我的本地文件夹,即:。
(我将response.body传递给数据字段,并传递字符串'binary'以指定选项下的编码)
var options = { encoding: 'binary' };
console.log('File name:' + fileName);
fileOperations.write(fileName, response.body, options, null);
在fileOperations中:
module.exports = {
write: function (filename, data, options, callback) {
fs.writeFile(filename, data, options, function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
}
};
文件将使用正确的文件名和扩展名以及文件大小保存到本地文件夹。但是,在预览中打开时,每个页面都是空白的我指定了错误的编码类型吗?
答案 0 :(得分:1)
这听起来像我遇到的问题。下载文件(不仅仅是pdf)导致了奇怪的结果。这更可能是你的问题....而不是fs功能。我们选择使用请求库(npm请求)并以这种方式执行下载,而不是使用内置节点http内容:
request({
method: 'GET',
uri: baseUrl + '/api/v1/documents/versions/contents/doc33',
headers: {"Access-Control-Allow-Origin": baseUrl, "Cookie": cookie}
}, function (error, response, body) {
var contentDisp = response.headers['content-disposition'].split('"');
var ext = contentDisp[1].split('.')[1];
// you can rename the downloaded file (temp) and add the proper extension here...
}).pipe(fs.createWriteStream('temp')); // you can append a directory to the temporary name as well..
}
我会试一试,看看它是否适合你。跨平台处理文件可能很困难。
答案 1 :(得分:0)
从node-webkit应用程序导出pdf文件。 首先你需要pdfkit;你可以看到doc here ..
然后你只需要在js:
中要求它var pdfkit = require('pdfkit');
var fs = require('fs');
你必须像这里一样使用另存为方框: 我的应用程序中的一个示例:
<button id="export">Export</button>
<input style="display:none" id="fileDialog" type="file" class="button small" accept=".pdf" nwsaveas="">
使用导出功能:
$('#export').click(function(event) {
chooseFile('#fileDialog');
});
function chooseFile(name)
{
var chooser = $(name);
chooser.change(function(event) {
event.preventDefault();
exp_to = $(this).val(); // where to export
console.log($(this).val());
exporT();
});
chooser.trigger('click');
}
和=&gt;最后
function exporT() // export() is already reserved
{
event.preventDefault();
var doc = new pdfkit();
doc.pipe(fs.createWriteStream(exp_to));
doc.fontSize(20) // font size
.text('your text here')//.whatyouwant()
.end();
}