上传Plotly生成的HTML到Azure Blob:如何将字符串转为字节内存上传
解决方案
你遇到的报错是因为io.StringIO()生成的是文本类型的内存流,而Azure Blob的上传接口要求传入字节类型数据/字节流,两种可用实现如下:
方案一:读取StringIO文本内容编码后上传
import io from azure.storage.blob import ContentSettings # 内存中写入Plotly生成的HTML文本 html_file = io.StringIO() fig.write_html(html_file) # 将流指针移动到起始位置,否则读取内容为空 html_file.seek(0) # 读取文本内容并编码为utf-8字节 html_bytes = html_file.read().encode('utf-8') # 调用原有上传逻辑上传 blob_client.upload_blob( html_bytes, blob_type="BlockBlob", overwrite=True, content_settings=ContentSettings(content_type='text/html') ) # 释放内存 html_file.close()
方案二:直接使用字节流承接HTML输出
可省略手动编码步骤,代码更简洁:
import io from azure.storage.blob import ContentSettings # 初始化字节类型内存流 html_bytes_io = io.BytesIO() # 写入HTML时指定编码为utf-8,可添加include_plotlyjs='cdn'参数减小HTML体积 fig.write_html(html_bytes_io, encoding='utf-8', include_plotlyjs='cdn') # 移动流指针到起始位置 html_bytes_io.seek(0) # 直接上传字节流 blob_client.upload_blob( html_bytes_io, blob_type="BlockBlob", overwrite=True, content_settings=ContentSettings(content_type='text/html') ) # 释放内存 html_bytes_io.close()
注:include_plotlyjs='cdn'为可选参数,公网可访问的场景下使用可大幅降低HTML文件大小,内网环境无法访问公共CDN时可删除该参数。
内容的提问来源于stack exchange,提问作者nanuuq
相关产品推荐
相关产品推荐

