在客服输入框里 Ctrl+V 贴一张截图,预览正常,发出去之前刷新了一下页面,图片位置变成一个小方块,地址是 blob 开头的一长串。乍看像缓存或者权限的锅,追下去往往不是。
const file = e.clipboardData.files[0];
const reader = new FileReader();
reader.onload = () => { preview.src = reader.result; };
reader.readAsDataURL(file);
追下去是这么回事:预览用创建对象地址的方式生成临时链接,这个地址只在当前文档生命周期里有效,刷新或者组件重建就失效。有人顺手撤销了地址,旧节点还指着它。
「blob 图片失效」这类改动最怕改一半,回滚脚本先准备好,再动生产。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
具体做法是,预览用 FileReader 转成 dataURL,面积小的图可以直接显示;真正上传还是走 FormData,别把临时地址存进消息记录;发送成功后再撤销,顺序反了预览会先裂。
验收就看一点,刷新之后预览还在,发送出去的消息里也是正常图片。
