Как вычислить на лету + загрузить файл - React / Django?

Я работаю над приложением, которое использует React и Django. Мне нужна функциональность, с помощью которой пользователь приложения может нажать кнопку и загрузить файл csv на свою машину. Важно, чтобы файл не был уже доступен где-либо, он должен генерироваться на лету, когда пользователь запрашивает его (нажимая на кнопку загрузки).

Я думаю о реализации этого потока:

Когда пользователь нажимает на кнопку, происходит вызов API, который дает команду бэкенду сгенерировать файл csv и сохранить его в s3 bucket Затем бэкенд отправляет ответ на фронтенд, содержащий URL, по которому фронтенд может загрузить файл из ведра s3. файл загружается Будет ли это хорошим подходом? Если нет, то какова наилучшая практика для этого?

Чтобы позволить пользователю скачать файл, вы можете просто использовать тег a

<a href="/path/to/generate/file.csv" download>

Я бы сделал так, чтобы кнопка действовала как ссылка и добавил использование url к вашему api, который создает файл. Затем бэкенд должен создать файл и может ответить на него напрямую.

Если генерация стоит дорого, вы можете загрузить ее на файловый сервер, который можно использовать для повторной передачи файла, если пользователь захочет загрузить его снова. Но тогда вам придется подумать и о других вещах, например, об обновлении файла, если что-то изменится, и о том, как проверить, не создан ли уже файл.

Никогда не рекомендую вам делиться ссылкой непосредственно на ваш файловый сервер, всегда пропускайте ее через ваш api.

Вернуться на верх