我如何有一个角度页面是二进制数据(例如pdf)

时间:2018-08-14 03:56:01

标签: url download binary angular6 angular-routing

我正在使用Angular6。
一项用户操作将授予他们访问新文件的权限。

我想公开一个静态URL,如果他们想再次获取文件,他们可以将其添加为书签(在这种情况下,示例可能是/ file / 124)

我的路由已成功定向到该页面(即正在加载正确的组件)。 我正在使用ActivatedRoute访问批次号(124)。

这一切都与我的auth系统一起使用,因此,点击页面的操作将调用我的API,该API(如果用户已通过身份验证)将向该文件所在的AWS S3存储桶返回一个一次性URL。然后,我可以使用此URL提取请求的文件

export class GpfileloadComponent implements OnInit {
  batch = '';

  constructor(
    private route: ActivatedRoute,
    private gpcApi: GPCAPIService
  ) { }

  ngOnInit() {
    this.batch = this.route.snapshot.paramMap.get('batch');

    this.gpcApi.getBatchFile(this.batch).subscribe(fileResponse => {
      document.getElementById('fileframe').src=fileResponse['path'];
    });
  }
}

在示例代码中,我只是将URL推入iframe(id ='fileframe')以使其可见。这只是为了使示例代码保持简单。我已经编写了成功下载文件的代码,并且可以轻松地使该页面触发文件下载。

我想要的是页面/ file / 124以“成为”文件。 也就是说,假设文件类型为pdf(并且假设浏览器支持pdf显示),则点击该页面将显示pdf填充了该页面。您将选择保存以保存pdf。

如上所述,我可以加载到iframe中,但这也不令人满意。 在使用服务器时,这很容易(例如,抛出302指向新的源-浏览器会保留当前的网址,但会从新的src获取)。

实际上,我能做的最好的事情就是在您访问该页面时触发下载。我认为这不是令人满意的答案。

任何人都可以建议这样做或如何访问dom的基础页面以允许完全替换dom吗?

我认为这应该是标准的并且经常可以完成,但是我在任何地方都找不到如何做的事情。

0 个答案:

没有答案