我目前正在尝试从HTTP请求获取文件,然后将数据写入文件(在本例中为PDF)。
使用下面的方法,我可以生成一个有效的PDF,但我发送的文件有几行,但我创建的文件是空白的。
我用来尝试获取数据的函数:
async function getDataFromReq(req){
let body = '';
await req.on('data', (chunk) => {
body += chunk;
});
return body;
}
我实现该函数并将其写入文件:
let file = await getDataFromReq(req);
await writeFile(fileName,file);
我的写文件功能:
async function writeFile(fileName,file){
fs.writeFileSync('./'+fileName, file);
}
注意事项:
我可以使用King Friday的解决方案,但我采纳了Quentins的建议,使用现有的库来完成任务,而不是重新发明轮子。
3条答案
按热度按时间myzjeezk1#
∮就像这样∮
然后您可以在异步方法中使用,如下所示...
nbewdwxp2#
req.on
未返回承诺您需要:
1.去掉
getDataFromReq
中的await
1.从
getDataFromReq
的声明中去掉async
(除非在里面使用await
,否则这是没有意义的)1.从
getDataFromReq
显式返回new Promise
1.注册一个处理程序,以便在传入数据完成传入时使用(
req.on('end', ...
)。resolve
该处理程序中的承诺然而,不重新发明轮子可能会更容易。已经有基于承诺的reading files和making HTTP requests模块。
xkrw2x1b3#
除了上面King Friday的回答之外,帮助我从HTTP请求中获取pdf文件的是在
event
'data'
中添加了以下行:之前,我将请求信息收集到数组中,并将函数结束部分的主体转换为base64字符串。结果是相同的,一个空白pdf。但是,将其转换为字符串,并连接数据块,同时将每个数据块转换为base64字符串解决了这个问题。完整的代码示例:
**更新:**我之前记录的解决方案只适用于单页的PDF。为了解决这个问题,我将
body
改为array
,并在data
回调中,遍历buffer
对象并将每个值添加到body
数组。最后,在end
函数中,我将buffer
数组转换为base64
字符串。