【问题标题】:How to force download PDF from folder to browser / user by JavaScript or Node.js?如何通过 JavaScript 或 Node.js 强制将 PDF 从文件夹下载到浏览器/用户?
【发布时间】:2019-08-10 17:31:48
【问题描述】:

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 文档已损坏”。

谁能帮我通过 JavaScript 从文件夹中下载 PDF 文件?

【问题讨论】:

  • 你没有使用createObjectURL,所以你不应该使用revokeObjectURL
  • @Phil 没听懂你。可以举个例子吗?
  • 当然...删除这一行~(window.URL || window.webkitURL).revokeObjectURL(save.href);
  • 好,我试试。
  • @Phil 试过了,同样的问题。

标签: javascript node.js pdf axios


【解决方案1】:

我已通过在节点路由“/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);
 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-15
    • 2011-09-25
    • 2010-12-27
    • 1970-01-01
    • 2016-06-20
    • 2017-11-04
    • 2018-12-11
    • 2017-06-03
    相关资源
    最近更新 更多