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

使用discord.py下载zip文件报415 Unsupported Media Type错误如何解决

问题原因

你调用attachment.save()方法时传入的use_cached=True参数是触发415错误的核心原因:
Discord仅会对图片、音视频这类支持在线预览的媒体格式做CDN缓存,zip属于非预览类附件,走缓存节点请求时就会返回415 Unsupported Media Type错误。

解决方法

直接把use_cached=True改为use_cached=False即可,强制从原始存储地址拉取附件,不走缓存节点,就能正常下载zip格式的文件。

额外优化建议

  1. 你代码中await asyncio.sleep(3)完全没有必要,attachment.save()是异步阻塞方法,执行完成就代表文件已经下载完毕,额外等待3秒只会拖慢命令响应速度,直接删除该行即可。
  2. 你可以不用把附件落地到本地磁盘,直接读内存流计算哈希,既省磁盘IO,也不用手动清理文件,更高效。

修改后参考代码

@commands.command()
@commands.has_permissions(administrator=True)
async def hash(self, ctx):
    if ctx.message.attachments:
        attachment = ctx.message.attachments[0]
        embed = discord.Embed(title="Hash",
                              description=attachment.filename,
                              color=discord.Color.blurple(),
                              timestamp=datetime.utcnow())
        # 直接读内存字节流,不需要存本地
        file_content = await attachment.read(use_cached=False)

        md5 = hashlib.md5()
        sha1 = hashlib.sha1()
        sha224 = hashlib.sha224()
        sha256 = hashlib.sha256()
        sha384 = hashlib.sha384()
        sha512 = hashlib.sha512()

        list_hash_objects = [md5, sha1, sha224, sha256, sha384, sha512]

        for hash_object in list_hash_objects:
            hash_object.update(file_content)
            embed.add_field(name=hash_object.name,
                            value=f"`{hash_object.hexdigest()}`")

        await ctx.send(embed=embed)
    else:
        await ctx.send("No file found!")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:15:03