You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文件发送异常:调用send_document后文件未成功发送

问题描述

用户发送文件名后,fd函数以数组格式返回正确的文件绝对路径(示例:['C:\Users\vlash\Documents\test1.txt']),但调用send_document传入该路径后,函数执行无任何反应,文件未发送至用户聊天窗口。相关代码如下:

@router.message(WorkFind.find)
async def find(message: Message, state: FSMContext):
    await message.answer(
        f'Ask'
    )
    path1 = [f"C:\\Users\\vlash\\Documents"]
    data = message.text
    if len(fd(path1, data)) > 0:
        for i in fd(path1, data):
            try:
                await message.bot.send_message(message.from_user.id, "Good answer")
                await message.bot.send_document(
                    chat_id = message.from_user.id,
                    document=FSInputFile(path = i),
                    caption = "231231231231")
                # await message.bot.send_document(chat_id=message.from_user.id, )
            except:
                await message.bot.send_message(message.from_user.id, "K.O.")
    else:
        await message.bot.send_message(message.from_user.id, 'AAAAAAAAAAAAAA')

    await message.bot.send_message(message.from_user.id, "Compliete")
    await state.clear() 

注:已尝试将FSInputFile存入变量,也手动输入过文件路径及名称,问题依旧。

排查与解决建议

  • 精准捕获异常信息:当前try-except未指定异常类型,也未输出错误详情,无法定位问题。修改为:

    except Exception as e:
        await message.bot.send_message(message.from_user.id, f"错误详情: {str(e)}")
    

    通过错误信息可直接定位是路径错误、权限问题还是API调用异常。

  • 验证文件路径与权限:

    • 确认fd返回的路径无拼写错误,可打印路径值核对;
    • 检查程序是否有读取该文件的权限(比如Windows下Documents文件夹的访问限制);
    • 尝试用绝对路径手动指定一个测试文件,确保文件真实存在且可读取。
  • 优化FSInputFile使用:

    • 确认已正确导入模块:from aiogram.types import FSInputFile;
    • 路径可使用原始字符串避免转义问题,比如FSInputFile(r"C:\Users\vlash\Documents\test1.txt")。
  • 避免重复调用fd:多次调用fd(path1, data)会浪费资源,先将结果存入变量再处理:

    file_paths = fd(path1, data)
    if file_paths:
        for i in file_paths:
            # 后续处理逻辑
    
  • 检查Bot状态与权限:

    • 确认Bot的API Token有效;
    • 确认用户未拉黑Bot,Bot可正常发送普通消息给用户(当前代码能发送"Good answer",这一步大概率没问题,但仍需确认)。

修改后的示例代码

@router.message(WorkFind.find)
async def find(message: Message, state: FSMContext):
    await message.answer('Ask')
    path1 = [r"C:\Users\vlash\Documents"]
    data = message.text
    file_paths = fd(path1, data)
    
    if file_paths:
        for file_path in file_paths:
            try:
                await message.bot.send_message(message.from_user.id, "Good answer")
                # 打印路径用于调试
                print(f"准备发送文件: {file_path}")
                await message.bot.send_document(
                    chat_id=message.from_user.id,
                    document=FSInputFile(file_path),
                    caption="231231231231"
                )
            except Exception as e:
                await message.bot.send_message(message.from_user.id, f"发送失败: {str(e)}")
    else:
        await message.bot.send_message(message.from_user.id, '未找到匹配文件')

    await message.bot.send_message(message.from_user.id, "操作完成")
    await state.clear() 

内容的提问来源于stack exchange,提问作者q_kara_p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:42:53