我目前正在处理一个网页,它提供了以 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 上进行了测试,在这两种情况下都提供了下载文件的可能性,然后它会自动打开。