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

使用Flask开发Line Bot时无法通过mktemp创建临时文件

解决Flask Line Bot保存图片时mktemp()未创建文件的问题

我来帮你排查这个问题!首先,mktemp() 其实已经是废弃的函数了,它不仅存在安全风险(可能被恶意利用创建冲突文件),而且行为在不同环境下不稳定,这大概率就是你没看到文件生成的核心原因。

问题根源与替代方案

Python官方早就不推荐使用mktemp(),转而推荐用tempfile模块下的NamedTemporaryFile,它更安全且行为可控。另外,你原来的代码手动调用f.close()容易遗漏,用with语句可以自动管理文件生命周期,避免资源泄漏。

修正后的完整代码

import tempfile
from linebot import LineBotApi, WebhookHandler
from linebot.models import MessageEvent, ImageMessage

@handler.add(MessageEvent, message=ImageMessage)
def handle_image_message(event):
    try:
        message_content = line_bot_api.get_message_content(event.message.id)
        # 使用NamedTemporaryFile替代mktemp,设置delete=False避免文件关闭后自动删除
        with tempfile.NamedTemporaryFile(
            dir=r'C:\Users\Suppavich\Desktop',
            prefix='img-',
            suffix='.jpg',
            delete=False
        ) as f:
            # 分块写入图片内容,指定chunk_size提升效率
            for chunk in message_content.iter_content(chunk_size=1024):
                f.write(chunk)
            print('图片保存成功')
            print(f'文件路径:{f.name}')
    except Exception as e:
        print(f'保存失败:{str(e)}')

额外注意事项

  • 权限检查:确保你的Python程序有写入桌面目录的权限。如果是用管理员身份运行程序,可能会导致桌面路径访问受限,可以先测试写入r'C:\temp'这类通用目录验证功能是否正常。
  • 路径格式:你用原始字符串(r'')处理Windows路径是正确的,避免了转义字符的问题,这部分无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:50:04