vant的图片上传组件预览问题

先记录问题:主要是我直接吧图片的base64字符串存入了数据库,再次打开页面加载图片时,要么就是页面显示图片错误,要么就是点击图片预览时查看失败。vant版本是4.8.0

<van-cell-group ><van-field label="图片" ><template #input><van-uploader v-model="fileList" :after-read="afterRead"  /></template></van-field></van-cell-group>

当file对象设置属性url值是"data:image/png;base64,iVBORw0KG..."格式时,页面显示如下:

for(var i=0;i<data.length;i++){fileList.value.push({url: data[i].content});//fileList.value.push({content: data[i].content, objectUrl: createObjectURL(data[i].content)});
}

当file对象设置属性content值是"data:image/png;base64,iVBORw0KG..."格式时,页面可以正常显示,但是一点击图片预览,可以正常放大预览的,可是页面显示却不正常了,变为上面样子了。

for(var i=0;i<data.length;i++){//fileList.value.push({url: data[i].content});fileList.value.push({content: data[i].content, objectUrl: createObjectURL(data[i].content)});}const createObjectURL = function(base64Data){// Base64编码的图片数据//var base64Data = "data:image/png;base64,iVBORw0KG..."; // 这里只展示部分内容// 获取Base64编码的图片类型(如PNG、JPEG等)var imageType = base64Data.split(',')[0].match(/:(.*?);/)[1];// 去除Base64编码头信息并进行URL解码var dataUrl = window.atob(base64Data.split(",")[1]);// 创建Uint8Array类型的字节数组var byteCharacters = new Uint8Array(dataUrl.length);for (let i = 0; i < dataUrl.length; i++) {byteCharacters[i] = dataUrl.charCodeAt(i);}// 创建Blob对象var blob = new Blob([byteCharacters], { type: imageType });//通过URL.createObjectURL(blob)可以获取当前文件的一个内存URLvar url = URL.createObjectURL(blob);return url;
}

点击图片预览前,页面显示正常。

点击图片预览后,页面显示异常:

如果不设置objectUrl属性,则点击图片无法正常预览。

试了很多方法都没办法达到预期效果。于是决定修改vant的源码。

vant的图片上传组件文件路径vant/es/uploader/Uploader.mjs(或者vant/lib/uploader/Uploader.js),原来的代码如下:

    const previewImage = (item) => {if (props.previewFullImage) {const imageFiles = props.modelValue.filter(import_utils2.isImageFile);const images = imageFiles.map((item2) => {if (item2.objectUrl && !item2.url && item2.status !== "failed") {item2.url = item2.objectUrl;urls.push(item2.url);}return item2.url;}).filter(Boolean);imagePreview = (0, import_image_preview.showImagePreview)((0, import_utils.extend)({images,startPosition: imageFiles.indexOf(item),onClose: onClosePreview}, props.previewOptions));}};

问题估计就是在里面那个if语句上面。修改后的源码:

    const previewImage = (item) => {if (props.previewFullImage) {const imageFiles = props.modelValue.filter(isImageFile);const images = imageFiles.map((item2) => {if (item2.objectUrl && !item2.url && item2.status !== "failed") {if(item2.objectUrl.indexOf("blob:") == 0){return item2.objectUrl;}item2.url = item2.objectUrl;urls.push(item2.url);}return item2.url;}).filter(Boolean);imagePreview = showImagePreview(extend({images,startPosition: imageFiles.indexOf(item),onClose: onClosePreview}, props.previewOptions));}};

然后清空缓存,重新启动调试,测试正常。

注意修改node_modules下面的源码后,需要删除vite的缓存。即deps目录(建议删除前先备份)。然后npm run dev重新启动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyTorch】代码学习

文章目录 直接定义nn.Sequential(), 然后append(),最后直接net(),少写很多forward&#xff0c;适合直连式网络 直接定义nn.Sequential(), 然后append(),最后直接net(),少写很多forward&#xff0c;适合直连式网络 代码来源&#xff1a;https://github.com/zshhans/MSD-Mixer/b…

HTML5的完整学习笔记

HTML 什么是HTML&#xff1a; 作为前端三件套之一&#xff0c;HTML的全称是超文本标记语言&#xff08;Hypertext Markup Language&#xff09;。HTML是一种标记语言&#xff0c;用于创建网页。它由一系列标签组成&#xff0c;这些标签用于定义网页的结构和内容。HTML标签告诉…

如何直接使用别人的Python项目的虚拟环境

Cannot set up a python SDK at Python 3.10 (flaskTest) (2) (H:\WorkPlace\PyWorkPlace\flaskTest\flaskTest\venv\Scripts\python.exe). The SDK seems invalid 如何复制别人的虚拟环境 修改步骤 1. 修改pyvenv.cfg文件里的home和version 2. Scripts\activate以及Scripts\a…

【数字图像处理】实验一 图像基本运算

图像基本运算 一、实验内容&#xff1a; 1&#xff0e; 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2&#xff0e; 熟练掌握各种图像点运算的基本原理及方法。 3&#xff0e; 能够从深刻理解点运算&#xff0c;并能够思考拓展到一定的应用领…

【让云服务器更灵活】iptables转发tcp/udp端口请求

iptables转发tcp/udp端口请求 文章目录 前言一、路由转发涉及点二、转发如何配置本机端口转发到本机其它端口本机端口转发到其它机器 三、固化iptables总结 前言 路由转发是计算机网络中的一种重要概念&#xff0c;特别是在网络设备和系统之间。它涉及到如何处理和传递数据包&…

Html / CSS刷题笔记

WebKit是一个开源的浏览器引擎&#xff0c;它最初是由苹果公司开发的&#xff0c;并且被广泛用于Safari浏览器和其他基于WebKit的浏览器&#xff0c;比如Google Chrome的早期版本。它也是构建许多移动设备浏览器的基础。WebKit的主要功能是解析HTML和CSS&#xff0c;并将其渲染…

贝叶斯判别

参考文献&#xff1a; 6 判别分析 | 多元统计分析示例https://www.cnblogs.com/qizhou/p/13495598.html 一、问题描述 贝叶斯判别的本质是一类分类问题&#xff1a;基于若干采样样本&#xff0c;如何学习一个分类器对新样本数据进行分类并保证分类错误的概率最小。 假设 一…

Flink系列之:Savepoints

Flink系列之&#xff1a;Savepoints 一、Savepoints二、分配算子ID三、Savepoint 状态四、算子五、触发Savepoint六、Savepoint 格式七、触发 Savepoint八、使用 YARN 触发 Savepoint九、使用 Savepoint 停止作业十、从 Savepoint 恢复十一、跳过无法映射的状态恢复十二、Resto…

Linux服务器 部署飞书信息发送服务

项目介绍&#xff1a; 飞书信息发送服务是指将飞书信息发送服务部署到一个Linux服务器上。飞书是一款企业级的即时通讯和协作工具&#xff0c;支持发送消息给飞书的功能。通过部署飞书信息发送服务&#xff0c;可以方便内网发送信息给外网飞书。 项目代码结构展示&#xff1a; …

【Midjourney】Midjourney根据prompt提示词生成黑白色图片

目录 &#x1f347;&#x1f347;Midjourney是什么&#xff1f; &#x1f349;&#x1f349;Midjourney怎么用&#xff1f; &#x1f514;&#x1f514;提示词格式 &#x1f34b;&#x1f34b;应用示例——“秘密花园”式涂色书配图生成 &#x1f34c;&#x1f34c;例子1…

ardupilot开发 --- 风机不停机巡检 篇

在哪里创建的siyi实例&#xff1f; 如何传递飞控的时间戳给siyi相机&#xff1f; AP_RTC_ENABLED在waf编译时配置为1&#xff1f;&#xff1f; 如何配置&#xff1f; 在lua脚本中如何获取这个时间AP::rtc().get_utc_usec(utc_usec)&#xff1f;&#xff1f;&#xff1f; inclu…

什么是误差,什么是重构误差,误差与重构误差有什么区别?

重构误差 1.误差的概念2.重构误差的概念 1.误差的概念 在机器学习中&#xff0c;误差通常是指模型的输出与实际标签或者真实值之间的差异&#xff0c;通常用于评估模型的预测能力或者训练的优化过程。 2.重构误差的概念 重构误差是指通过学习到的模型来重新构建&#xff08;或…

HBase基础知识(二):HBase集群部署、HBaseShell操作

1. HBase安装部署 1.1 Zookeeper正常部署 首先保证Zookeeper集群的正常部署&#xff0c;并启动之&#xff1a; 创建集群启动脚本&#xff1a; #!/bin/bash case $1 in "start"){ for i in hadoop100 hadoop101 hadoop102 do echo----------zookeeper $i 启动----…

听GPT 讲Rust源代码--src/tools(19)

File: rust/src/tools/jsondoclint/src/json_find.rs json_find.rs文件是Rust源代码中jsondoclint工具的一部分。该工具用于在文档注释中查找JSON示例并验证其格式。 具体来说&#xff0c;json_find.rs文件定义了一个用于在文档注释中查找JSON示例的实用工具&#xff0c;它提供…

【YOLOV8预测篇】使用Ultralytics YOLO进行检测、分割、姿态估计和分类实践

目录 一 安装Ultralytics 二 使用预训练的YOLOv8n检测模型 三 使用预训练的YOLOv8n-seg分割模型 四 使用预训练的YOLOv8n-pose姿态模型 五 使用预训练的YOLOv8n-cls分类模型 <

ChatGPT 4 用实际案例来完成Excel求和函数用法与多条件求和

我们先让ChatGPT4来帮我们总结一下求和函数及条件求和函数的用法,并举例演示。 Excel中求和函数(SUM)是用来计算一列或多列单元格之和的函数。基本的使用方法如下: `=SUM(A1:A10)` 这公式会返回 A1 到 A10 单元格内所有数字的和。如果这些单元格中有非数字类型的值,它们…

nodejs+vue+微信小程序+python+PHP兴趣趣班预约管理系统设计与实现-计算机毕业设计推荐

当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。 软件信息技术能够覆盖社会各行业领域是时代的发展要求&…

案例135:基于微信小程序的房屋租赁管理系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

vue-内网,离线使用百度地图(地图瓦片图下载静态资源展示定位)

前言 最近发现很多小伙伴都在问内网怎么使用百度地图&#xff0c;或者是断网情况下能使用百度地图吗 后面经过一番研究&#xff0c;主要难点是&#xff0c;正常情况下我们是访问公网百度图片&#xff0c;数据&#xff0c;才能使用 内网时访问不了百度地图资源时就会使用不了&…