如何下载用户在聊天中发送的文件?
例如
我需要从电报下载文件moonloader.log
到我的本地路径C:\text-folder\moonloader.log
并阅读它。
目前为止的代码
def checkFile(path):
if os.path.isfile(path):
f = open(path, 'r')
log = f.read()
print('начинаю проверку...')
# check log
result = re.search('MoonLoader v.(.+) loaded.', log)
if result:
moonlog_version = result.group(1)
print('• Версия moonloader: ' + moonlog_version)
for err in range(0, len(errors)):
for i in errors[err]:
print(' • Ошибка: ' + errors[err][i])
# ON RECEIVE FILE
@dp.message_handler(content_types=types.ContentType.DOCUMENT)
async def fileHandle(message: types.File):
await message.reply(text='файл получен, начинаю поиск ошибок...')
## LOAD FILE CODE
checkFile(LOADED FILE PATH)
更新代码
我试着遵循answer of hc_dev并添加了下载方法。但不知道如何从File
或file_path
获得message
。我试过这个:
def download_file(file: types.File):
file_path = file.file_path
destination = r'C:\\Users\\admin\\Desktop\\moonlog inspector\\download'
destination_file = bot.download_file(file_path, destination) # ON RECEIVE FILE
@dp.message_handler(content_types=types.ContentType.DOCUMENT)
async def fileHandle(message: types.Document):
await message.reply(text='файл получен, начинаю поиск ошибок...')
## LOAD FILE CODE
download_file(message.file_id)
但是,当运行时,它会引发错误:
'Message‘对象没有属性'file_id'
发布于 2021-09-09 18:01:14
以下问题欢迎并解释了电报Bot中新的getFile
操作:How do I download a file or photo that was sent to my Telegram bot?
在aiogram中,您可以在download_file
对象上使用Bot
:作为参数,您可以传递字符串file_path
(在电报服务器上标识文件的路径)和本地卷上的destination
。
file_path
是types.File
对象的属性。
bot = # your_bot accessing Telegram's API
def download_file(file: types.File):
file_path = file.file_path
destination = r"C:\folder\file.txt"
destination_file = bot.download_file(file_path, destination)
发布于 2022-04-05 17:58:23
如果不想在本地保存文件,可以使用。在我的项目中,我习惯于保存这样的文件:
@dp.message_handler(content_types=['photo', 'document'])
async def photo_or_doc_handler(message: types.Message):
file_in_io = io.BytesIO()
if message.content_type == 'photo':
await message.photo[-1].download(destination_file=file_in_io)
elif message.content_type == 'document':
await message.document.download(destination_file=file_in_io)
# file_in_io - do smth with this file-like object
或者使用上下文管理器:
async with io.BytesIO() as file_in_io:
await message.photo[-1].download(destination_file=file_in_io)
file_in_io.seek(0)
# file_in_io - do smth with this file-like object
https://stackoverflow.com/questions/69122337
复制相似问题