我们有一个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,并且您可以将该重定向页面命名为您。但这只是理论,我从来没有尝试过自己做。
可以在此插件中看到一个粗略的概念证明,显然,您需要动态生成 blobRename.html ,并将其名称更改为所需的名称,并强制使用它的内容标题,以便浏览器认为它是html。如果您想摆脱该页面.html。还要注意,它似乎不适用于需要浏览器插件触发的pdf文件,但是如果您需要做更多的工作,就有 可能 破解某些东西。
.html
但是无论如何,我只会让随机网址成为您的用户,因为越来越多的Web应用程序确实使用了这个出色的API,因此您的用户将越来越习惯它。