下载时生成的docx为空
Generated docx is empty when downloaded
这是一个 Meteor 应用程序。我需要生成一个 docx 文件并下载它。
我正在通过 运行 进行测试:localhost:3000/download.
Word文件生成了,但是里面是空的。
为什么?我将不胜感激任何建议!
这是我的服务器端代码:
const officegen = require('officegen');
const fs = require('fs');
Meteor.startup(() => {
WebApp.connectHandlers.use('/download', function(req, res, next) {
const filename = 'test.docx';
let docx = officegen('docx')
// Create a new paragraph:
let pObj = docx.createP()
pObj.addText('Simple')
pObj.addText(' with color', { color: '000088' })
pObj.addText(' and back color.', { color: '00ffff', back: '000088' })
pObj = docx.createP()
pObj.addText(' you can do ')
pObj.addText('more cool ', { highlight: true }) // Highlight!
pObj.addText('stuff!', { highlight: 'darkGreen' }) // Different highlight color.
docx.putPageBreak()
pObj = docx.createP()
let out = fs.createWriteStream(filename);
res.writeHead(200, {
'Content-Disposition': `attachment;filename=${filename}`,
'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
});
res.end(docx.generate(out));
});
});
您面临的问题是 docx.generate(out) 是一个异步函数:当调用 res.end(docx.generate(out))
时,您立即结束请求,同时开始在文件 [=12] 中生成 docx =].因此该文档不存在还。
您应该修改您的代码以像这样直接发送文件:
res.writeHead(200, {
'Content-Disposition': `attachment;filename=${filename}`,
'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
});
docx.generate(res)
如果您仍然需要服务器端的文件,您可以使用另一种方法等待文件生成(see here)
这是一个 Meteor 应用程序。我需要生成一个 docx 文件并下载它。 我正在通过 运行 进行测试:localhost:3000/download.
Word文件生成了,但是里面是空的。
为什么?我将不胜感激任何建议!
这是我的服务器端代码:
const officegen = require('officegen');
const fs = require('fs');
Meteor.startup(() => {
WebApp.connectHandlers.use('/download', function(req, res, next) {
const filename = 'test.docx';
let docx = officegen('docx')
// Create a new paragraph:
let pObj = docx.createP()
pObj.addText('Simple')
pObj.addText(' with color', { color: '000088' })
pObj.addText(' and back color.', { color: '00ffff', back: '000088' })
pObj = docx.createP()
pObj.addText(' you can do ')
pObj.addText('more cool ', { highlight: true }) // Highlight!
pObj.addText('stuff!', { highlight: 'darkGreen' }) // Different highlight color.
docx.putPageBreak()
pObj = docx.createP()
let out = fs.createWriteStream(filename);
res.writeHead(200, {
'Content-Disposition': `attachment;filename=${filename}`,
'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
});
res.end(docx.generate(out));
});
});
您面临的问题是 docx.generate(out) 是一个异步函数:当调用 res.end(docx.generate(out))
时,您立即结束请求,同时开始在文件 [=12] 中生成 docx =].因此该文档不存在还。
您应该修改您的代码以像这样直接发送文件:
res.writeHead(200, {
'Content-Disposition': `attachment;filename=${filename}`,
'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
});
docx.generate(res)
如果您仍然需要服务器端的文件,您可以使用另一种方法等待文件生成(see here)