Как загрузить файл Excel из бэкэнда в веб-интерфейс? - PullRequest
1 голос
/ 03 февраля 2020

Я хочу запустить браузерную загрузку файла Excel, сгенерированного в моем бэкэнде, но не могу понять, как передать такой ответ.

app.get('/all', function (req, res) {
    db.query(...) LIMIT 20000;")
    .then(function (data) {
        let result = []
        data.forEach(element => {
            result.push(element)
        })

        /* make the worksheet */
        var ws = XLSX.utils.json_to_sheet(data);

        /* add to workbook */
        var wb = XLSX.utils.book_new();
        XLSX.utils.book_append_sheet(wb, ws, "All");

        XLSX.writeFile(wb, 'alltest1.xlsx'); //This saves the file in my server but I don't know how to send it as a response.

        console.log('Ready');

        res.send(result);
    })
    .catch(function (error) {
        console.log("ERROR:", error)
    })
})

Я пытался создать Excel во внешнем интерфейсе, но chrome не хватает памяти из-за большого количества данных, я думаю. Я также пытаюсь передать буфер, но файл, который я получаю, кажется, поврежден.

1 Ответ

1 голос
/ 03 февраля 2020

Установить заголовок ответа Content-Disposition и Content-Type файла, который сообщает браузеру, что файл отправляется как ответ

res.setHeader('Content-Disposition',
        "attachment; filename='alltest1'; filename*=UTF-8\'\'alltest1.xlsx");
res.setHeader('Content-Type', "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

и отправьте содержимое файла в качестве ответа

res.send(wb)

ИЛИ Вы также можете использовать res.download .

res.download(filePath, fileName, (err) => { if (err) console.log(err); })
...