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

JavaScript通过MQTT接收图片修改img标签src属性不生效问题求助

问题原因
  • DOM选择逻辑错误
    document.getElementsByClassName()返回的是匹配类名的所有元素组成的类数组集合(HTMLCollection),并非单个DOM元素,直接给集合设置.src属性不会生效,且由于JS允许为对象自定义新增属性,该操作不会触发控制台报错。
  • 二进制转base64逻辑错误
    你接收到的r_message.payloadBytes是图片的原始二进制数据,使用TextDecoder('utf8')解码属于逻辑错误:UTF-8是文本编码规则,强行解码二进制图片数据会造成数据不可逆损坏,最终生成的base64字符串无效,无法正常渲染为图片。
解决方法
  1. 修正DOM选择逻辑:要么给img标签设置id属性,用getElementById获取单个元素;要么直接取类数组集合的第一个元素。
  2. 修正二进制转base64的逻辑,直接处理原始二进制数据,不要用文本解码器。

修改后的完整代码如下:

function onMessageArrived(r_message) {
    console.log("message here")
    // 取匹配类名的第一个元素
    document.getElementsByClassName('img_importer')[0].src = "data:image/png;base64," + convert(r_message.payloadBytes);
}

function convert(buffer) {
    // 直接将二进制缓冲区转为base64,不经过UTF-8文本解码
    return btoa(String.fromCharCode(...new Uint8Array(buffer)));
}

补充验证点:如果MQTT传输的图片格式不是png,需要将data URI中的image/png替换为对应的实际格式(如image/jpeg)。


内容的提问来源于stack exchange,提问作者Hicham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:42:04