在JavaScript中将docx文件编码为base64

时间:2018-11-16 16:46:43

标签: javascript node.js base64

我正在本地下载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文件,并且其中也充满了内容。

1 个答案:

答案 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");
})