我们有一个 Angular 应用程序,它获取一些输入参数并将它们发送到后端进行处理。处理结果是一个pdf文件,我们要在新选项卡中打开。
执行此操作的代码类似于以下内容:
myService.getDocument(document)
.then(function(response) {
if (response.error) {
// Error handling goes here
} else {
var file = new BLob([response.data), {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
$window.open(fileURL, '_blank_');
}
});
一切正常,但浏览器中的 URL 显示一些随机生成的字符串,如下所示:
blob:http://localhost:3000/85cad96e-e44e-a1f9-db97a96ed3fe
显然,这对最终用户来说看起来不太好,我们更愿意显示对用户有意义的东西,如下所示:
blob:ftp://localhost:3000/my_document_name_or_whatever
我是 JS 新手,Angular 新手,HTML 新手,希望我的问题听起来不是很天真。
预先感谢您的投入。
简短的回答,你不能.
这是一个指向浏览器内存的地址,它存储了您的 blob,或者是指向原始文件的指针(如果用户通过输入 type=file 上传文件)。
这在某种程度上是设计使然的。您可以从同一个 Blob 创建多个此类 blobURL。如果他们使用文件名作为 URI,您就不能这样做。
理论上,您应该可以动态创建一个重定向到 BlobURI 的页面,并且您可以将此重定向页面命名为您的名称。但这只是理论,我自己从未尝试过。
粗略的概念证明可以在这个笨蛋,显然,你需要生成blob重命名.html动态地,并将其名称更改为您想要的名称,并且还强制其内容标头,以便浏览器认为它是一个 html 页面,如果您想摆脱.html
。
另请注意,它似乎不适用于 pdf 文件,需要浏览器插件才能触发,但通过更多工作,它may有可能破解一些东西。
但无论如何,我只是让随机 URL,随着越来越多的 Web 应用程序使用这个出色的 API,您的用户会越来越习惯它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)