当前位置: 首页 > news >正文

如何优化微信小程序中渲染带有图片的列表(二进制流存储方式的图片存在本地数据库)

方法一:对列表的获取进行分页处理

实现方法:

前端请求(需要向后端传两个参数,pageIndex是获取第几页是从0开始,pageSize是这一页需要获取多少个数据)

后端接口实现(因为这里是通过参数拼接请求的形式传数据,所以接口使用HttpGet进行获取)

当我们拿到这两个参数后需要使用sql语句去本地数据库进行分页取数据

代码如下:

var sqlStr = $"select * from UserInfo where UserType=1 ORDER BY UserInfoId OFFSET {pageIndex * pageSize} ROWS FETCH NEXT {pageSize} ROWS ONLY;";

这里就将获取的数据进行返回就可以了,在返回后如果想加载下一页的数据。(这里使用了微信小程序上拉触底的事件) 

直接找到上拉触底事件的生命周期,然后在其中先对当前页进行加1,在去请求获取数据的接口(获取的数据需要自己处理到当前的数据列表中,这样才不会丢失已存在的数据)

方法二:在保存数据时就对前端返回的二进制图片数据进行压缩处理(后端处理压缩,前端不太好实现)

在前端获取的数据流就是如上图所示传到后端的时候是使用string类型接收的

首先我们先去实现一个工具类:

 /// <summary>/// 图片压缩工具类/// </summary>public class ImageCompressor{public byte[] CompressImageFromBase64(string base64Data, long quality = 70L){// 1. 去除Base64头(如"data:image/png;base64,")//var cleanBase64 = base64Data.Split(',')[1];byte[] imageBytes = Convert.FromBase64String(base64Data);// 2. 加载图片并压缩using (var msInput = new MemoryStream(imageBytes))using (var image = Image.FromStream(msInput))using (var msOutput = new MemoryStream()){// 设置JPEG压缩质量(如果是PNG,调整格式)var encoderParams = new EncoderParameters(1);encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, quality);// 获取JPEG编码器var jpegEncoder = GetEncoder(ImageFormat.Jpeg);// 保存压缩后的图片image.Save(msOutput, jpegEncoder, encoderParams);return msOutput.ToArray();}}private ImageCodecInfo GetEncoder(ImageFormat format){var codecs = ImageCodecInfo.GetImageDecoders();foreach (var codec in codecs){if (codec.FormatID == format.Guid)return codec;}return null;}}

这个工具类可以将前端传的base64String类型的数据转为二进制数进行存储,并将文件压缩为原先百分之70(这样在获取的时候对图片精度要求不高的情况下是可以使用的)

方法三:对大文件进行分片存储 

http://www.dtcms.com/a/222655.html

相关文章:

  • 图解gpt之注意力机制原理与应用
  • (一)微服务(垂直AP/分布式缓存/装饰器Pattern)
  • Kubernetes 入门:安装 kubectl 并掌握基础命令
  • 将材质球中的纹理属性对应的贴图保存至本地
  • ES6 深克隆与浅克隆详解:原理、实现与应用场景
  • 华为云Flexus+DeepSeek征文|基于华为云Dify平台打造个人知识库聊天机器人全流程指南
  • 每日算法-250530
  • leetcode538.把二叉搜索树转换为累加树:反向中序遍历的数值累加之道
  • leetcode108.将有序数组转换为二叉搜索树:递归切分中点构建平衡树的智慧
  • 第10讲、Odoo 18框架设计原理全解析
  • PyTorch中nn.Module详解
  • 西瓜书第九章——集成学习
  • 服务器如何配置防火墙管理端口访问?
  • GitHub 趋势日报 (2025年05月29日)
  • Java类和对象详解
  • 【代码训练营Day03】链表part1
  • 4.2.2 Spark SQL 默认数据源
  • 一文详谈Linux中的时间管理和定时器编程
  • 【计算机网络】传输层UDP协议
  • Hive的JOIN操作如何优化?
  • Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)
  • 软件测评中心如何确保软件品质?需求分析与测试计划很关键
  • Linux研学-环境搭建
  • .NET 查找 DLL 的路径顺序
  • Netty 实战篇:为 Netty RPC 框架引入调用链追踪,实现链路透明化
  • 基于原生JavaScript前端和 Flask 后端的Todo 应用
  • YOLOv8目标检测实战-(TensorRT原生API搭建网络和使用Parser搭建网络)
  • DeepSeek-R1-0528-Qwen3-8B 本地ollama离线运行使用和llamafactory lora微调
  • 在 ODROID-H3+ 上安装 Win11 系统
  • NHANES指标推荐:CQI