а половина файлы, фотки и тд. Я хочу отсылать на фронт ссылку на загрузку файлов, чтобы он сам их загружал на s3. Вопрос как это правильно реализовать? Грузить сразу как только юзер загрузит с компа, или при сабмите кнопки всё это делать?
Не тот чат
Ещё думаю сперва слать json, а ответом получать id сессии, чтобы удоствориться что данные провалидированные, и уже после этого грузить фотки. В первом случае хз как удалять их с s3, если юзер уйдет с сайта
ну это больше про реализацию на бекенде, мне нужно решить как сделать это на сервисе
а не проще ли загружать на S3 и отдавать бэку ID обьектов в запросе? Да, есть риски, но оправдано ли для вас сейчас тратить на них время?
Ну вот это хороший вариант, но одна проблема, что если юзер не отправит форму бекенд не узнает об этих id. И следовательно не сможет их в будущем удалить
Хотя думаю, что можно реализовать что-то типа таблицы, и слать туда при каждой загрузке, в которой будут всё эти ключи, и при каждой новой отправке формы находить ключи и удалять. А те что в течении n времени не удалились удалять автоматично
Платит за s3 кто? Ты масштаб рисков прикинул?
Должен быть отдельный эндпоинт загрузки картинок. Goшный эндпоинт в ответ на загрузку картинки должен отдавать id из БД (из таблицы, в которой хранятся ссылки на s3-объекты). Фронт этот id должен отправлять вместе с остальными полями формы при её сабмите. Т.е. загрузка картинки - отдельный процесс. Пользователь в форме сначала грузит картинку, после чего у него становится доступной кнопка сабмита формы (если картинка в форме обязательна). P.s. если не хочется платить за s3, можно на сервере развернуть Minio
Хорошо, звучит более продумано, спасибо
У меня по такой схеме куча проектов работает
а в таблицах сохраняется key и url?
Нет, url не храню, смысла нет. Потому что домен картинок может и поменяться со временем. Если мне нужно отдавать url, я его в коде формирую. Там поля примерно такие: id (uuid) s3key (text) user_id (uuid) created_at (datetime with timezone) Остальное по желанию (например, размер изображения и т.п.)
Обсуждают сегодня