使用Sendgrid发送压缩Folium地图邮件时,ZIP附件无法打开的求助
修复Folium地图ZIP附件无法打开的问题
你的代码能生成ZIP文件并完成邮件发送,但附件提示「无效的ZIP文件」,核心原因是ZIP文件还未完成写入就提前读取了内容。
在with zipfile.ZipFile(...)代码块内,ZIP的完整写入操作要等到块结束时才会完成(自动执行关闭流程,写入目录等收尾数据)。你现在在块内调用zip_buffer.seek(0)并后续获取内容,拿到的是未完成的ZIP数据,自然无法正常解压。
修复后的代码:
map_content = m.get_root().render() zip_buffer = io.BytesIO() # 完成ZIP写入并自动关闭后再操作缓冲区 with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zipf: zipf.writestr("event_map.html", map_content.encode('utf-8')) # 移到with块外执行指针重置 zip_buffer.seek(0) attachments = [location_attachment, coverage_attachment, zip_buffer.getvalue()] filenames = [ "Raw Data 1.csv", "Data 2.csv", "event_map.zip" ] filetypes = ["text/csv", "text/csv", "application/zip"]
额外排查项:
- 确认
location_attachment和coverage_attachment的内容格式正常,不会干扰ZIP附件的解析 - 若问题仍存在,可尝试改用
zipfile.ZIP_STORED模式(不压缩),排查是否是压缩算法的兼容性问题
内容的提问来源于stack exchange,提问作者soiryk139
相关产品推荐
相关产品推荐

