Кодировать файл docx на base64 в JavaScript

Я загружаю файл docx локально и хочу кодировать его в base64, но кажется, что файлы docx для кодирования не работают. Я пробовал этот метод с .txt и изображениями, и он возвращает строку 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

Ответ № 1

Я выяснил, что вы не используете async-wait.

На этой строке:

const file = encodeBase64(__dirname + "/temp/template.docx");

ecvodeBase64 () является асинхронной функцией и возвращает обещание. Какое обещание возвращается либо в функцию обратного вызова .then () , либо нужно использовать ожидание для получения значения.

Чтобы исправить вышеуказанный случай, вы должны сделать следующее:

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");
})
источник

Похожие темы:

В чем разница между "Array()" и "[]" при объявлении массива JavaScript?
JQuery - удалить стиль, добавленный с помощью функции .css()
SetTimeout или setInterval?

Другие вопросы по меткам:

javascriptnode.jsbase64


licensed under cc by-sa 3.0 with attribution.