我允许用户从我的应用程序下载文件。这些文件是私有文件,需要经过身份验证才能访问它们。
当前,前端从服务器请求一个短暂的令牌,并将其附加到URL,以便服务器可以验证授权用户是否正在尝试丢弃它。该令牌在后端生成,并且每次用户想要下载文件时都需要获取一个新令牌。基于此新令牌,确定下载URL。
这会导致一些问题:
- 由于除非用户单击下载,否则我没有可用的URL,因此默认情况下,我无法使链接href指向正确的文件路径。
- 我希望用户单击下载链接,然后下载便会开始。这就是为什么我试图寻找一种在单击后设置链接href的方法。我将以一个空的href开头,然后在onclick上设置正确的href并导航,这将开始下载。 This would be fine if there was no asynchronous call involved,但在这里,我必须等待令牌,然后更改href才能继续导航。
总而言之,我试图了解是否存在一种方法来暂停事件并在令牌可用后恢复它。如果我阻止Default,是否有某种方法可以恢复Default。
也许是,我想要的功能是在导航到使用链接之前等待承诺解决。
一些替代方法:
- 提供一个用于“生成下载链接”的按钮,单击此按钮,获取下载令牌,并创建一个具有适当href的新链接并显示在UI上。用户现在可以单击此链接来下载文件。
- 单击原始链接后,请阻止Default,获取令牌,创建临时链接,然后以编程方式单击此临时链接。
- 当承诺返回时,使用window.open。