После отправки файла через Telegram файл приходит битым

решил реализовать возможность пользователю хранить исполняемые файлы в боте(aiogram). Для начала я получаю файл, читаю все его биты, кодирую в base64 и записываю это в бд. Когда пользователь просит файл я достаю base64 из базы, декодирую, записываю в файл биты и отправляю пользователю. Проблема: Когда я отправляю файл через метод bot.send_document() файл приходит битым, т.е не работает. Я проверил все этапы и на каждом этапе файл рабочий, работает даже тот файл что получился после декодирования base64 из базы, и он тоже запускается но отправленный файл не запускается и скорей всего является битым.

Так же я сравнил base64 и биты при получении и при извлечении из базы, они одинаковые! Т.е я считаю что проблема не на моей стороне т.к у меня всё работает.

Вот некоторые куски кода(python), и библиотека для создания base64 кода:

base64 - ссылка

Функция для создания файла из base64, входные данные:

name - имя файла

base - base64

def write_file_bit(self, name, base):
    file = open(f'{name}', 'wb')
    base64_string = base64.b64decode(base)
    file.write(base64_string)

Функция для создания base64 из байтов, входные данные:

bytes - байты полученные из файла

def bytes_to_base(self, bytes):
    base64_string = base64.b64encode(bytes)
    return base64_string

Получение файла и добавление в базу:

    data = await state.get_data()
    document_id = msg.document.file_id
    file_info = await bot.get_file(document_id)
    fi = file_info.file_path
    name = msg.document.file_name
    r = requests.get(f'https://api.telegram.org/file/bot{TOKEN}/{fi}', f'./{name}')
    bytes = r.content
    base = file_work.bytes_to_base(bytes)

    try:
        database.add_to_queue_exe(msg.from_user.id, base, name, data['name_service'])
        create_buttons(['Вернуться на главную?'])
        await bot.send_message(msg.from_user.id, f'Программа успешно добавлена,её можно посмотреть в личном кабинете', reply_markup=greet_kb)
    except Exception as e:
        print(e)
        create_buttons(['Вернуться на главную?'])
        await bot.send_message(msg.from_user.id, f'Неизвесная ошибка❌ Пожалуйста сообщите администрации', reply_markup=greet_kb)

Получение base64 из базы, создание файла и отправка пользователю:

    base = database.get_base_file_user(exes[couter][3])[2:-1]
    random_name = random.randint(1,157153717531753715371)
    expansion = exes[couter][1][str(exes[couter][1]).rfind('.') + 1:]
    file_work.write_file_bit(f'{random_name}.{expansion}', base)
    await bot.send_document(user_msg.from_user.id, (exes[couter][1], f'{random_name}.{expansion}'))
    #os.remove(f'{random_name}.{expansion}')

Тут в конце я закомментировал строку удаления файла после создания, этот файл РАБОЧИЙ

Если коротко повторю проблему, файл приходит не рабочим и проблема точно не на моей стороне. Заранее спасибо за помощь!


Ответы (1 шт):

Автор решения: videx

Проблема была в том что в методе send_message() я вставил название файла где должно было быть его содержимое. Желаю всем быть более внимательным чем я :)

→ Ссылка