1

我目前正在处理一个网页,它提供了以 pdf 格式下载报告的可能性。报告在服务器上生成,请求通过“Json”发出。获得响应后,“pdf”文档将显示在新的浏览器选项卡中。我遇到的问题是文件名以 base64 格式保存(非常长)。

有没有办法改变这个文件名?

在此处输入图像描述要保存的文件名

我目前有效的代码

$(document).on('click', '.pdfInforme', function (e) {
    e.preventDefault();
    var data = $(this).attr("ord");
    var d = data.split("*");
    var ord = d[0];
    var pac = d[1];
    $('#loading-indicator').show();
    var $modal = $(this);
    $.ajax({
        type: "POST",
        url: 'Download.aspx/ServerRequest',
        contentType: 'application/json',
        dataType: 'json',
        data: JSON.stringify({ 'ord': ord }),
        success: function (result) {
            //pdf

      //Is Firefox?
            var nav = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;

            var byteCharacters = atob(result.d);
            var byteNumbers = new Array(byteCharacters.length);
            for (var i = 0; i < byteCharacters.length; i++) {
                byteNumbers[i] = byteCharacters.charCodeAt(i);
            }
            var byteArray = new Uint8Array(byteNumbers);
            var file = new Blob([byteArray], { type: 'application/pdf;base64' });

            const dataURI = result.d;
            const blob = file;
            const url = URL.createObjectURL(blob);
            const blobAnchor = document.createElement('a');
            const dataURIAnchor = document.createElement('a');
            blobAnchor.download = 'Informe_' + pac + '_' + ord;
            dataURIAnchor.download = 'Informe_' + pac + '_' + ord;
            blobAnchor.className = 'hidden';
            blobAnchor.href = url;
            dataURIAnchor.href = dataURI;
            document.body.appendChild(blobAnchor);

            blobAnchor.onclick = function () {
                requestAnimationFrame(function () {
                    URL.revokeObjectURL(url);
                    setTimeout(() => blobAnchor.remove(), 300);
                });
            };

            if(nav)
                blobAnchor.click();
            else
                window.open(blobAnchor, '_blank');

            $("#downloadzip").remove();
            $('#loading-indicator').hide();
        },
        error: function (req, status, error) {
            alert(error);
        }
    });
});

我试过了:(它只适用于更改新标签的标题)

document.title="New File Name";

我找到了 chrome 和 edge 的解决方案(非常接近解决它):

使用 Angular 2 和 Node 下载 PDF 不适用于 Firefox

使用此解决方案,我可以使用“ blob ”在具有短名称(例如“0a06ff23-cea1-417b-87ac-ec591315786e”)的新选项卡中打开一个文件。但是,我仍然无法将文件名修改为另一个默认名称。

另一方面,这种方法在 Firefox 中不起作用,新选项卡甚至无法打开(它在 Chrome 和 Edge 中会打开)。无论如何,这至少是部分解决方案。

升级

我注意到 Firefox 正在下载文件,而不是在新选项卡中打开它。因此,我检查它是否是 Firefox 浏览器,并针对每种情况执行不同的操作。对于 Firefox,使用我选择的默认名称下载文件,当浏览器是 Chrome 或 Edge 时,文件会在新选项卡中打开,名称类似于“0a06ff23-cea1-417b-87ac-ec591315786e”。它在 Android 和 Apple 上进行了测试,在这两种情况下都提供了下载文件的可能性,然后它会自动打开。

4

0 回答 0