当前位置: 首页 > 编程日记 > 正文

小程序一次性上传多个本地图片,上拉加载照片以及图片加载延迟解决之道

一:小程序之一次性上传多个本地相片

最近由于项目需要所以学了下小程序,也做了一些东西,随后便有了以下的一些总结了,现在说说如何使用小程序一次性上传多个本地相片。


问题描述

最近做项目的时候要实现一个上传相片的功能,用了微信提供的api之后发觉很容易就做出来了,在pc端调试也没有弊端,但是等到我用真机调试的时候就发现出问题了,问题就是在真机调试的时候无法一次性上传多张图片。


老规矩,以源码为导向


photos.js

//部分参数我就不抽出了,关键是看实现机制
var app = getApp();
var baseUrl = app.baseUrl;
//上传图片的路径 var uploadUrl = baseUrl+'pictureController/insertPic'; var array = []; var owerId = '33aef7e0ac1b11e6af9f142d27fd7e9e'; var albumId; var pageSize = 9; var currentPage = 1; var cryUrl = app.cryUrl; Page({ data: { hasMore:false, cryUrl:cryUrl, clientHeight:0, // 图片布局列表(二维数组,由`albumList`计算而得) layoutList: [], // 布局列数 layoutColumnSize: 3, // 是否显示loading showLoading: false, // loading提示语 loadingMessage: '', // 是否显示toast showToast: false, // 提示消息 toastMessage: '', // 是否显示动作命令 showActionsSheet: false, // 当前操作的图片 imageInAction: '', // 图片预览模式 previewMode: false, // 当前预览索引 previewIndex: 0, images_upload: '../resources/images/camera.png', imageBaseUrl : baseUrl+"pictures/" }, /* 函数描述:作为上传文件时递归上传的函数体体; * 参数描述: * filePaths是文件路径数组 * successUp是成功上传的个数 * failUp是上传失败的个数 * i是文件路径数组的指标 * length是文件路径数组的长度 */ uploadDIY(filePaths,successUp,failUp,i,length){ wx.uploadFile({ url: uploadUrl, filePath: filePaths[i], name: 'fileData', formData:{ 'pictureUid': owerId, 'pictureAid': albumId }, success: (resp) => { successUp++; }, fail: (res) => { failUp ++; }, complete: () => { i ++; if(i == length) { this.showToast('总共'+successUp+'张上传成功,'+failUp+'张上传失败!'); } else { //递归调用uploadDIY函数 this.uploadDIY(filePaths,successUp,failUp,i,length); } }, }); }, uploadImage:function(e){ wx.chooseImage({ count: 9, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success: (res) => { var successUp = 0; //成功个数 var failUp = 0; //失败个数 var length = res.tempFilePaths.length; //总共个数 var i = 0; //第几个 this.uploadDIY(res.tempFilePaths,successUp,failUp,i,length); }, }); } })

那么如何使用呢?

修改了uploadUrl之后,直接调用 uploadImage 函数即可。


我使用用递归的方式来多次上传选中的图片的原因?

小程序的官方文档有提到, wx.uploadFile一次只能上传一张图片,而我用了for循环多次上传的在pc端调试可以上传多张成功,但是在真机调试的时候却还是只能上传一张,于是我便投机在上传成功之后再次调取wx.uploadFile进行上传,结果成功了,为了代码整洁我便用了递归的方式进行调用。

二:上拉加载照片以及图片加载延迟解决之道

问题描述

无论是app还是小程序,加载图片多的时候都会出现图片加载缓慢和流量耗费多的问题。而我在小程序中的解决方案是上拉加载和进行“变相懒加载”。


老规矩,以源码为导向讲解上拉加载


photos.wxml

    <scroll-view class="scroll" style="height:{{clientHeight}}px;" scroll-y="true" bindscrolltolower="loadMore" > //放置图片的代码 </scroll-view>

源码解读:这里只需要关注bindscrolltolower函数即可,它意思是上拉的时候触发的函数,而这里触发的函数是loadMore。

photos.js

loadMore: function(e){
this.showLoading('正在加载图片中');
var that = this;
currentPage++;
wx.request({url: baseUrl  +'pictureController/getPicturesByAid',data: {pictureAid: albumId,pageSize: pageSize,currentPage : currentPage},header: {'content-type': 'application/json'},success: function(res) {console.log(res);if(res.data.result.length!=0){ array = array.concat(res.data.result)that.setData({ array : array})}else{that.showToast('已加载完全部图片!');}},complete: function(res){that.hideLoading();}})
}

源码解读:js函数中的一些参数和函数我都去掉了,留下这个loadMore函数,这个函数的作用是用pageSize和currentPage做分页参数传递到后台加载新的数据,然后将得到的数据res.data.result利用concat函数连接在array之后,array函数的作用是存放之前已经加载过来的数据,连接新数据结束后再用一次setData即可!


现在看看我是如何巧用变相懒加载的


做过项目的都知道,图片的懒加载其实就是在图片还没有加载成功的时候出现一张默认的图片,这样可以不至于图片还没有加载成功的时候出现一大推空白的地方,我也是因为做项目出现这种情况之后才开始研究如何避开这种情况,大家可以看一下的源码:

<scroll-view class="scroll" style="height:{{clientHeight}}px;" scroll-y="true" bindscrolltolower="loadMore" > <view class="function" style="background-image:url({{cryUrl}})" wx:for="{{array}}" wx:for-item="item"> <image src="{{imageBaseUrl+item.pictureAid+'/'+item.pictureName}}" style="height:95%;width:95%;margin:3px auto;" bindtap="selectPhotos" id="{{imageBaseUrl+item.pictureAid+'/'+item.pictureName}}&{{item.pictureUploadtime}}"/> </view> </scroll-view>

源码解读:这个就是从服务器获取图片数据成功之后循环排列图片的源码,重点在于style="background-image:url({{cryUrl}})" 里边是在图片还没有加载成功之前显示的一个div的背景图片,而就是这个背景图片避开了图标没加载成功之前空白的尴尬。
Note:发布的这些文章全都是自己边学边总结的,难免有纰漏,如果发现有不足的地方,希望可以指出来,一起学习咯,么么哒。
开源爱好者,相信开源的力量必将改变世界:
osc : https://git.oschina.net/xi_fan
github: https://github.com/wiatingpub

相关文章:

测试项目案例思路

近期帮公司培训部设计测试方向教学案例&#xff0c;原型为我们部门开发的某问卷系统&#xff0c;详情如下&#xff1a; 《**问卷系统》计划授课小时总数为85小时&#xff0c;预计实际授课要根据学生的掌握情况&#xff0c;建议增加5小时&#xff0c;请将此因素考虑到案例使用时…

赠书 | Python人脸五官姿态检测

作者 | 李秋键 出品 | AI科技大本营近几个月来由于疫情的影响使得网络授课得到了快速的发展&#xff0c;人工智能作为最有潜力的发展行业&#xff0c;同样可以应用于网络授课的监督。比如通过检测人脸姿态&#xff0c;眼睛是否张开&#xff0c;鼻子嘴巴等特征&#xff0c;来达到…

明白了这十个故事,你也就参悟了人生

1、断箭   不相信自己的意志&#xff0c;永远也做不成将军。   春秋战国时代&#xff0c;一位父亲和他的儿子出征打仗。父亲已做了将军&#xff0c;儿子还只是马前卒。又一阵号角吹响&#xff0c;战鼓雷鸣了&#xff0c;父亲庄严地托起一个箭囊&#xff0c;其中插着一只箭。…

java中的几种对象(PO,VO,DAO,BO,POJO)

一、PO :(persistant object )&#xff0c;持久对象 可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。二、VO :(value object) &#xff0c;值对象通常用于业务层之间的数据传递&#xff0c;和PO一样也是仅仅包含数据而已。但应是抽象出的业务对…

jquery文件上传控件 Uploadify

基于jquery的文件上传控件&#xff0c;支持ajax无刷新上传&#xff0c;多个文件同时上传&#xff0c;上传进行进度显示&#xff0c;删除已上传文件。 要求使用jquery1.4或以上版本&#xff0c;flash player 9.0.24以上。 有两个版本&#xff0c;一个用flash,一个是html5。html5…

AI 还原康乾盛世三代皇帝的样貌,简直太太太好玩了!

作者 | Jack Cui出品 | AI科技大本营一位 B 站 up 主「Jack Cui」使用 AI 技术&#xff0c;还原了康熙、雍正、乾隆的历史样貌。看看富态的雍正&#xff01;&#xff01;算法实现人工智能技术&#xff0c;可以实现很多有趣而又有意义的事情。 利用 StyleGAN 算法&#xff0c;可…

男人一生中要做的事

作者&#xff1a;未知 请作者速与本人联系揽住母亲的肩头&#xff1a; 每个人都是最棒的&#xff0c;父体的千万个细胞中最强壮的一个才能跑到最前面与来自母体的细胞结合。这时&#xff0c;有二分之一的机会会诞生一个男人。儿子&#xff0c;无疑是父亲所有理想的最好载体&am…

【BZOJ2157】旅游

2157: 旅游 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1460 Solved: 656[Submit][Status][Discuss]Description Ray 乐忠于旅游&#xff0c;这次他来到了T 城。T 城是一个水上城市&#xff0c;一共有 N 个景点&#xff0c;有些景点之间会用一座桥连接。为了方便游客到…

PHP面向对象精要

1 使用extends实现继承以及重载、魔术方法的含义 class B extends A 声明的时候B里可以没有A里的方法 调用的时候$bnew B(); $b->A里的方法(); $b->A里的属性1; $b->B里的方法(); $b->B里的方法(); 如果$anew A(); 可以 $a->A里的方法(); $a->A里…

码农新机会!2019-2020行业调查报告出炉,这个领域程序员缺口很大!

近日&#xff0c;CSDN发布了《2019-2020中国开发者调查报告》&#xff0c;本报告从2004年开始针对一年一度的CSDN开发者大调查数据分析结果形成&#xff0c;是迄今为止覆盖国内各类开发者人群数量最多、辐射地域、行业分布最广的调查活动。笔者从本次调查中&#xff0c;挑选出一…

线性代数与矩阵论 定理 1.5.6 拉格朗日插值公式

给定域$\mathbf{F}$中$n1$个不同的数$\alpha_1,\alpha_2,\cdots,\alpha_{n1}$,以及域$\mathbf{F}$中另外$n1$个数$\beta_1,\beta_2,\cdots,\beta_{n1}$,则唯一存在域$\mathbf{F}$中一个次数不超过$n$的多项式$f(x)$,使得$f(\alpha_j)\beta_j,1\leq j\leq n1$,其中 \begin{equat…

Android的ToolBar

ToolBar比ActionBar更加可控&#xff0c;自由。因此&#xff0c;Google 逐渐使用ToolBar来代替ActionBar。 使用ToolBar 1.要引入appCompat_v7支持 2.主题设置为NoActionBar 在style.xml文件中 <style name"MyAppTheme" parent"Theme.AppCompat.Light.NoActi…

利用.NET的XML序列化解决系统配置问题

作者&#xff1a;未知 请作者速与本人联系 出自&#xff1a; http://blog.csdn.net/ycl111/在Web系统开发中&#xff0c;我们经常需要读取和设置一些系统配置项&#xff0c;常见的例如数据库连接字符串、上传路径等等。在最初的ASP系统中&#xff0c;比较常用的方法是将值保存…

告别CNN?一张图等于16x16个字,计算机视觉也用上Transformer了

编译 | 凯隐出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;Transformer是由谷歌于2017年提出的具有里程碑意义的模型&#xff0c;同时也是语言AI革命的关键技术。在此之前的SOTA模型都是以循环神经网络为基础&#xff08;RNN, LSTM等&#xff09;。从本质上来讲&…

mysql left join,right join,inner join用法分析

2019独角兽企业重金招聘Python工程师标准>>> 下面是例子分析 表A记录如下&#xff1a; aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 200603240…

如果BarTender出现卸载不干净的问题如何处理

自从BarTender 2016出了之后&#xff0c;好多小伙伴都想试试新功能咋样&#xff0c;这就意味着首先要卸载电脑上旧版BarTender。然而就是这个操作&#xff0c;难倒了好一批人&#xff0c;他们表示BarTender卸载卸不干净&#xff0c;不仅旧版的用不起来了&#xff0c;新版BarTen…

iometer硬盘测试工具附教程

教程地址http://servers.pconline.com.cn/skills/0711/1145597.html转载于:https://blog.51cto.com/cywin7/1081456

Python炫技操作:模块重载的五种方法

作者 | 写代码的明哥来源 | Python编程时光环境准备新建一个 foo 文件夹&#xff0c;其下包含一个 bar.py 文件$ tree foofoo└── bar.py 0 directories, 1 filebar.py 的内容非常简单&#xff0c;只写了个 print 语句print("successful to be imported")只要 bar.…

使用Powershell管理Linux 下的 SQL Server

使用Powershell管理Linux 下的 SQL Server我们上一篇文章介绍了在Centos 7.3下安装及配置 SQL Server&#xff0c;今天我们主要介绍的是如何在Windows下使用Powershell来管理Linux下的SQL Server&#xff0c;其实说到Powershell大家都已经很熟悉了&#xff0c;Powershell不止是…

这么多年,终于有人讲清楚Transformer了

作者 | Jay Alammar译者 | 香槟超新星&#xff0c;责编 | 夕颜来源 | CSDN&#xff08;ID:CSDNnews&#xff09;注意力机制是一种在现代深度学习模型中无处不在的方法&#xff0c;它有助于提高神经机器翻译应用程序性能的概念。在本文中&#xff0c;我们将介绍Transformer这种模…

提高IIS网站服务器的效率的八种方法 (转载)

作者&#xff1a;未知 请作者速与本人联系以下是提高IIS 5.0网站服务器的执行效率的八种方法&#xff1a; 1. 启用HTTP的持续作用可以改善15~20%的执行效率。 2. 不启用记录可以改善5~8%的执行效率。 3. 使用 [独立] 的处理程序会损失20%的执行效率。 4. 增加快取记忆体的保存…

搭建Docker私有仓库--自签名方式

为了能集中管理我们创建好的镜像&#xff0c;方便部署服务&#xff0c;我们会创建私有的Docker仓库。通读了一遍官方文档&#xff0c;Docker为了确保安全使用TLS,需要CA认证&#xff0c;认证时间长的要钱啊&#xff0c;免费过期时间太短&#xff0c;还是用自签名比较简单。 准备…

Visual C# .NET 2003 语言的改变

Visual C# .NET 2003 语言的改变 Prashant Sridharan Microsoft Corporation 2002年12月30日 适用于&#xff1a; Microsoft Visual Studio C# 2003 摘要&#xff1a;为了与欧洲计算机制造商协会 (ECMA) 的 C# 规范完全兼容&#xff0c;Microsoft Corporation 对 C# 编译器的…

.net内存管理与指针

本人前段时间准备做个TIN三角网的程序&#xff0c;思想是是分割合并法&#xff0c;分割的同时建立平衡二叉树&#xff0c;然后子树建三角网并相互合并&#xff0c;再向上加入父亲的点集。由于我对.net语言熟点&#xff0c;就准备用c#语言实现。但是不知从那听过当建立的类型只想…

强化学习是针对优化数据的监督学习?

作者 | Ben Eysenbach、Aviral Kumar、Abhishek Gupta 编译 | 凯隐出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;强化学习&#xff08;RL&#xff09;可以从两个不同的视角来看待&#xff1a;优化和动态规划。其中&#xff0c;诸如REINFORCE等通过计算不可微目标期…

solrcloud Read and Write Side Fault Tolerance

2019独角兽企业重金招聘Python工程师标准>>> SolrCloud supports elasticity, high availability, and fault tolerance in reads and writes. What this means, basically, is that when you have a large cluster, you can always make requests to the cluster: …

XML的二十个热点问题

http://www.netqu.com 中华技术网会员 Wuxuehui 发布翻译&#xff1a;Chen Zhihong 编辑&#xff1a;孙一中这些日子,几乎每个人都在谈论XML (Extensible Markup Language)&#xff0c;但是很少有人真正理解其含义。XML的推崇者认为它能够解决所有HTML不能解决的问题&#xff0…

5G+云网融合,移动云带领开发者释放边缘计算的力量

在5G浪潮的驱动下&#xff0c;智能设备、自动驾驶、VR/AR等对于实时性、本地性有着较强需求的场景日益丰富&#xff0c;边缘计算应运而生&#xff0c;有效提升了用户体验。众所周知&#xff0c;边缘计算技术的突破&#xff0c;意味着许多控制将通过本地设备实现而无需交由云端&…

Linux下模拟RAID5实现磁盘损坏,数据自动切换到备份磁盘上

另一个博客地址&#xff1a;www.rsyslog.org Linux社区 RAID5磁盘配额&#xff0c; 1块磁盘&#xff0c;分5个分区模拟5块磁盘&#xff0c;其中4个做成RAID5分区&#xff0c;剩余一个作为冗余磁盘&#xff0c;挂载到/data1目录&#xff0c;模拟其中一块磁盘损坏&#xff0c;冗…

jsp9大内置对象

转载于:https://www.cnblogs.com/xtdxs/p/6523059.html