Я просто хочу попросить вас дать лучший опыт, как предоставлять пользователям изображения WebP и JPEG через Django.
У меня есть сайт о транспортных средствах - каждый день добавляется около 1000 автомобилей, и у каждого автомобиля есть около 10 изображений. Это много образов. Я сделал пользовательскую команду «import django-admin», которая анализирует автомобиль:
Поскольку я использую AMP HTML, я могу просто перейти от WebP к JPEG для браузеров, которые не поддерживают WebP. А поскольку изображения находятся в одной и той же папке /media/.../, все работает отлично.
Но сегодня я обнаружил, что этот метод не совершенен. Когда есть одинаковые имена изображений, Django в методе save() получает метод get_random_string(), который генерирует дополнительные 7 символов в конце файла https://github.com/django/django/blob/master/django/utils /crypto.py
Итак, мой метод shuitl.move() не работает:
shutil.Error: Destination path '/home/django/exampleproject/media/2020/12/10/example-compressed-image-img01.jpg' already exists
И я не знаю, как выяснить, как получить такое же имя для этого файла JPEG - как получить этот хеш в конце файла. Имя файла должно быть одинаковым — для WebP и JPEG единственное расширение должно быть разным. Я, конечно, могу перечислить все файлы, найти эти хэши и попытаться дописать их... но я думаю, что этот способ не идеален.
Лучшим методом будет использование только изображений WebP, но не все браузеры его поддерживают. Для меня очень важно использовать WebP из-за SEO — у него есть ключевые слова в имени файла.
Есть ли лучший способ, как сохранить изображения WebP и JPEG в ImageField в тот же каталог upload_to с тем же именем (также когда Django переименует его, когда имя файла уже существует)? Я не хочу использовать две таблицы для этого или два столбца, потому что это много строк, и если в будущем у меня будет более 10 миллионов записей, это много данных в БД.
Буду рад любым советам, спасибо!
Я решил аналогичную проблему, вставив uuid в имена файлов. Вот пример этого. Использовать уникальные имена загружаемых файлов с помощью django?
Другим вариантом может быть загрузка на S3, который автоматически создаст уникальные имена файлов по мере необходимости, а затем запустит лямбда-функцию для новых загрузок, чтобы сгенерировать второе изображение и имя файла.
Спасибо за ваш совет. Возможно, я воспользуюсь этим
uuid
решением. Для S3 это будет лучшее решение, но оно очень дорогое, потому что у меня будет около 3-5 Гб изображений в день.