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

上传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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:24:10