使用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格式的文件。
额外优化建议
- 你代码中
await asyncio.sleep(3)完全没有必要,attachment.save()是异步阻塞方法,执行完成就代表文件已经下载完毕,额外等待3秒只会拖慢命令响应速度,直接删除该行即可。 - 你可以不用把附件落地到本地磁盘,直接读内存流计算哈希,既省磁盘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
相关产品推荐
相关产品推荐

