@s1zen

AIOGRAM Как скачать фото от пользователя и дать фото уникальный id?

Сам вопрос. Мне нужен уникальный id для запись пути в бд
  • Вопрос задан
  • 2048 просмотров
Решения вопроса 1
@MaxKra1985
разработчик java, python
Сообщение с фото имеет следующую структуру:

{
	"message_id": 312,
	"from": {
		"id": 161269475,
		"is_bot": false,
		"first_name": "Максим",
		"last_name": "Кравчук",
		"username": "maxkra1985",
		"language_code": "ru"
	},
	"chat": {
		"id": 161269475,
		"first_name": "Максим",
		"last_name": "Кравчук",
		"username": "maxkra1985",
		"type": "private"
	},
	"date": 1652697021,
	"photo": [
		{
			"file_id": "AgACAgIAAxkBAAIBOGKCJ71RLTUVH5ZbRrK9Ej-7q_UCAAKevDEbhfARSHumNOs9iBaqAQADAgADcwADJAQ",
			"file_unique_id": "AQADnrwxG4XwEUh4",
			"file_size": 1388,
			"width": 90,
			"height": 75
		},
		{
			"file_id": "AgACAgIAAxkBAAIBOGKCJ71RLTUVH5ZbRrK9Ej-7q_UCAAKevDEbhfARSHumNOs9iBaqAQADAgADeAADJAQ",
			"file_unique_id": "AQADnrwxG4XwEUh9",
			"file_size": 23968,
			"width": 359,
			"height": 300
		},
		{
			"file_id": "AgACAgIAAxkBAAIBOGKCJ71RLTUVH5ZbRrK9Ej-7q_UCAAKevDEbhfARSHumNOs9iBaqAQADAgADbQADJAQ",
			"file_unique_id": "AQADnrwxG4XwEUhy",
			"file_size": 25171,
			"width": 320,
			"height": 267
		}
	]
}


Таким образом, можно использовать file_unique_id как уникальный идентификатор (правда не числовой) для сохранения файла:
photoSize: PhotoSize = message.photo[-1]
    file_info = await bot.get_file(photoSize.file_id)
    fileExt = file_info.file_path.split(".")[-1]
    await message.photo[-1].download(f"{photoSize.file_unique_id}.{fileExt}")
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@rPman
хеш от содержимого файла, если база изображений содержит считанные миллионы файлов - то хватит md5, если больше - лучше использовать что то с большим количеством бит какой-нибудь sha512 и соответственно меньшей вероятностью коллизий

достоинством будет - одинаковые файлы не будут дублироваться в твоем хранилище
Ответ написан
Комментировать
shurshur
@shurshur
Сисадмин, просто сисадмин...
Самое простое и чаще всего самое разумное - использовать числовой id, монотонно растущий, типа auto_increment в mysql или serial в postgres.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы