我正在使用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吗?
我认为这应该是标准的并且经常可以完成,但是我在任何地方都找不到如何做的事情。