如何无需本地保存即可使用send_file()发送folium地图?
解决方案:直接在内存中生成并发送folium地图
无需创建本地HTML文件,你可以利用folium的内置方法获取地图的HTML内容,再通过内存字节流直接发送,避免文件的创建与删除操作。具体实现步骤如下:
- 导入Python标准库中的
io模块,用于在内存中处理字节流 - 通过
my_map._repr_html_()方法直接获取地图的HTML字符串(该方法原本用于在Jupyter Notebook中渲染地图) - 将HTML字符串编码为字节流,存入
BytesIO对象 - 重置字节流的读取指针到起始位置,确保
send_file能正确读取内容 - 直接将内存中的字节流作为附件返回
替换后的代码
import io from flask import send_file # 假设你使用Flask框架 # 生成地图的原有逻辑保持不变... # 直接获取HTML内容并转为内存字节流 map_html = my_map._repr_html_() byte_stream = io.BytesIO(map_html.encode('utf-8')) byte_stream.seek(0) # 将指针移到流的开头 # 发送内存中的字节流作为附件 return send_file( byte_stream, as_attachment=True, download_name='map.html', # 指定下载的文件名 mimetype='text/html' )
关键说明
_repr_html_():folium地图对象的内置方法,返回完整的地图HTML代码,无需写入本地文件BytesIO:在内存中模拟文件对象,避免磁盘IO操作,提升效率seek(0):写入字节流后,指针会停在末尾,必须重置到开头才能让send_file读取全部内容
内容的提问来源于stack exchange,提问作者banderlog013
相关产品推荐
相关产品推荐

