Я разрешаю пользователям загружать файлы из моего приложения. Файлы являются частными и требуют авторизации для доступа к ним.
В настоящее время веб-интерфейс запрашивает у сервера краткосрочный токен и добавляет его к URL-адресу, чтобы сервер мог убедиться, что авторизованный пользователь пытается его загрузить. Этот токен генерируется на бэкэнде, и каждый раз, когда пользователь хочет загрузить файл, необходимо выбирать новый токен. Основываясь на этом новом токене, определяется URL для загрузки.
Это приводит к некоторым проблемам:
- Поскольку у меня нет доступного URL-адреса, пока пользователь не нажмет кнопку «Загрузить», у меня не может быть ссылки href, указывающей на правильный путь к файлу по умолчанию.
- Я бы хотел, чтобы пользователь просто щелкнул ссылку для скачивания, и загрузка должна начаться Вот почему я пытаюсь найти способ установить ссылку href после клика. Я бы начал с пустого href и по клику установил бы правильный href и переместился, чтобы начать загрузку. Это было бы хорошо, если бы не был задействован асинхронный вызов , но здесь я должен дождаться токена, а затем изменить href, прежде чем продолжить навигацию.
В целом, я пытаюсь понять, есть ли способ приостановить событие и возобновить его после того, как токен будет доступен. Если я предотвращаю дефолт, есть ли способ возобновить дефолт.
Или, может быть, мне нужна функция ожидания разрешения обещания, прежде чем переходить по ссылке.
Некоторые альтернативные подходы:
- Предоставьте кнопку для «генерации ссылки на скачивание», нажмите эту кнопку, получите маркер загрузки и создайте новую ссылку с соответствующим href и отображением в пользовательском интерфейсе. Теперь пользователь может щелкнуть эту ссылку, чтобы загрузить файл.
- Когда исходная ссылка нажата, предотвращение дефолта, получение токена, создание временной ссылки и программный переход по этой временной ссылке.
- используйте window.open, когда обещание вернется.