一尘不染

BLOB URL的自定义名称

angularjs

我们有一个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的新手,希望我的问题听起来不是很幼稚。

预先感谢您的输入。


阅读 902

收藏
2020-07-04

共1个答案

一尘不染

简短的回答, 您不能

这是指向浏览器内存的地址,它是您存储blob的地址,或者是用户通过输入type = file上传文件的情况下指向原始文件的指针。

这是设计使然。您可以从同一Blob创建多个这些blobURL。如果他们要使用文件名作为URI,则不能这样做。

从理论上讲,您应该可以动态创建一个页面,该页面将重定向到BlobURI,并且您可以将该重定向页面命名为您。但这只是理论,我从来没有尝试过自己做。

可以在此插件中看到一个粗略的概念证明,显然,您需要动态生成
blobRename.html
,并将其名称更改为所需的名称,并强制使用它的内容标题,以便浏览器认为它是html。如果您想摆脱该页面.html。还要注意,它似乎不适用于需要浏览器插件触发的pdf文件,但是如果您需要做更多的工作,就有
可能 破解某些东西。

但是无论如何,我只会让随机网址成为您的用户,因为越来越多的Web应用程序确实使用了这个出色的API,因此您的用户将越来越习惯它。

2020-07-04