Как принудительно загрузить PDF из папки в браузер / пользователя с помощью JavaScript или Node.js? - PullRequest
3 голосов
/ 20 марта 2019

HTML (шаблон ejs) код:

<input class="download" data-orderId="<%= orders[i].stubhubOrderId %>" type="button" value="Download">

Код JavaScript / jQuery:

$(document).on('click', '.download', function (e) {
    showSpinner();
    const orderId = $(this).attr('data-orderId');
    axios.post('/get-order-ticket-by-orderid', {
        orderId: orderId
    })
    .then(function (response) {
            hideSpinner();
            // PDF Download code
            const fileURL = '/uploads/539038653.pdf'
            const fileName = '539038653.pdf'
            // for non-IE
            if (!window.ActiveXObject) {
                var save = document.createElement('a');
                save.href = fileURL;
                save.target = '_blank';
                save.download = fileName || 'unknown';

                var evt = new MouseEvent('click', {
                    'view': window,
                    'bubbles': true,
                    'cancelable': false
                });
                save.dispatchEvent(evt);

                (window.URL || window.webkitURL).revokeObjectURL(save.href);
            }

            // for IE < 11
            else if ( !! window.ActiveXObject && document.execCommand)     {
                var _window = window.open(fileURL, '_blank');
                _window.document.close();
                _window.document.execCommand('SaveAs', true, fileName || fileURL)
                _window.close();
            }   
    })
    .catch(function (error) {
        hideSpinner();
    });
});    

Когда я вручную открываю PDF (http://localhost:3001/uploads/539038653.pdf) в новой вкладке, тогда он работает нормально, но по приведенному выше коду я получаю поврежденный / поврежденный файл (PDF). Я получил это сообщение «PDF-документ поврежден» пока открыть скачанный PDF.

Может кто-нибудь помочь мне скачать файл PDF из папки с помощью JavaScript?

1 Ответ

3 голосов
/ 22 марта 2019

Я решил эту проблему, добавив приведенный ниже код в маршрут узла «/ get-order-ticket-by-orderid» (см. Код в моем вопросе для «/ get-order-ticket-by-orderid»)

let wstream = data.data.pipe(fs.createWriteStream('uploads/test.pdf'));
 wstream.on('finish', function () {
    return res.status(data.status).json(data);
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...