我正在本地下载docx文件,并希望将其编码为base64,但是似乎无法对docx文件进行编码。我已经尝试过使用.txt和images的此方法,但它确实返回base64字符串。我必须使用库或其他方法来编码docx文件吗?
async function encodeBase64(path) {
let buff = fs.readFileSync(path);
let base64data = buff.toString('base64');
return base64data;
}
https.get(result['@microsoft.graph.downloadUrl'], function(response) {
const file = encodeBase64(__dirname + "/temp/template.docx");
})
这将导致一个空字符串。
编辑:
const file = encodeBase64(__dirname + "/temp/template.docx");
file.then(function(result) {
console.log(result)
return res.send(result);
}).catch(function(error) {
console.log(error)
})
使用图像和.txt文件,它将结果成功记录在控制台中。当我尝试使用docx文件时,它返回一个空字符串。我绝对可以肯定它正在选择docx文件,并且其中也充满了内容。
答案 0 :(得分:0)
我发现您没有正确使用异步等待。
在这一行:
const file = encodeBase64(__dirname + "/temp/template.docx");
ecvodeBase64()是异步函数并返回一个Promise。答应返回的内容要么进入.then()
回调函数,要么需要使用await来获取值。
要纠正上述情况,您必须执行以下操作:
https.get(result['@microsoft.graph.downloadUrl'], function(response) {
encodeBase64(__dirname + "/temp/template.docx")
.then( file => {
// use file here
});
});
或
https.get(result['@microsoft.graph.downloadUrl'], async function(response) {
const file = await encodeBase64(__dirname + "/temp/template.docx");
})