Кодировать файл docx в base64 в JavaScript - PullRequest
0 голосов
/ 16 ноября 2018

Я загружаю файл 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 Ответ

0 голосов
/ 17 ноября 2018

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

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

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

ecvodeBase64 () является асинхронной функцией и возвращает обещание. Возврат обещания идет либо в .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");
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...