`

JSJDK-预览、选择、上传图片

阅读更多

预览、选择、上传图片,微信都有提供接口,这里记录一下这三个接口在我这里的用处。

 

1、预览图片:这个比较简单,找到图片一张一张预览就好了,直接上代码吧。

var picList = [];
//循环要预览的图片
$('.photoList>li>img').each(function(index, element) {
	var picUrl = $(this).attr("src");//获取图片路径
	//添加图片预览事件
	picList[index] = picUrl;
       $(this).click(function(){
		wx.previewImage({
			current: picUrl, // 当前显示的图片链接
			urls: picList // 需要预览的图片链接列表
		});
	})
});

 

2、选择图片:这个也比较简单,微信的帮助文档说的也很清楚。也直接上代码吧。

/**
 *该方法用来选择文件
 */
function selectWXFile(){
	var imgStr="",IDs="";
        //文件上传
	wx.chooseImage({
    	count: 9, // 默认9
	 	sizeType:['original'], // 可以指定是原图还是压缩图,默认二者都有
	 	sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
      	success: function (res) {
            IDs = res.localIds;//返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
            if (IDs.length == 0) {
                $.Dialog.fail("请先使用 chooseImage 接口选择图片");
                return;
            }
            //进行文件上传
           syncUpload(0,IDs.length,IDs);
      	}
    });
}

 

 注意点:获取到的localIds必须转成String,也就是必须localIds=localIds.toString()再将localIds作为img的src属性才能显示出图片。

 

3、上传图片:这个有点麻烦,前提条件是在上传多张图片的情况下。因为微信规定的就是每次只能传一张,要想传多张就得一张一张上传。

容易想到的思路就是:文件选择完毕之后在回调函数的success方法中添加循环,循环一张本地ID,上传一张。这个方法在安卓系统中可以实现多张,但是在苹果里只能上传1张,也就是无论选择多少张最后上传到微信服务器的只有1张。我这里采用的是递归的方法,也就是我传完一张在页面显示一张,然后再调用文件上传的办法。(所以在上面的选择文件方法的末尾有上传文件的方法)。

/**
 * 该方法用来上传文件
 * @param start:本地ID开始的下标(当前上传的图片的下标)
 * @param end:本地ID的总个数(也就是选择的图片的总个数)
 * @param IDs:当前批次选择的所有图片在本地ID的集合
 * */
function syncUpload(start,end,IDs){
	start = parseInt(start,10);
	end = parseInt(end,10);
	//alert("start="+start+"\nend="+end);
	if(start<end){
		var localId = IDs[start].toString();
		//alert("本地ID:"+localId);
	    wx.uploadImage({
	        localId: localId,
	        isShowProgressTips: 1,//显示进度条
	        success: function (res) {
	            var serverId = res.serverId; // 返回图片的服务器端ID
	            serverId = serverId.toString();
	            //alert("获取到serverID:"+serverId);
	            
	            //将选定的图片信息显示到页面
	            var divRanId = parseInt((new Date().getTime())/10,10);
				divRanId="add_"+divRanId;
	            var imgStr="<div id='"+divRanId+"' class='add_file_upload' sign='2'>"+
	            		"<input type='hidden' name='fileServerId' value='"+serverId+"' />" +
						"<img src='"+localId+"' width='85%' height='76%' class='imgClass' onclick='deletePhoto(this);'/>" +
						"<div class='righ'><img src='images/right.png'/></div>" +
						"<form class='box-css'>" +
						"<a class='reduce' href='javascript:void(0);' onclick='reduce(this);'><img src='images/cart_btn_reduce.png'/></a>" +
						"<input style='font-size: 9pt;width:40px;padding:0px; text-align:center; float:left; display:inline-block; height:21px; border-radius:0px;margin:2px 5px; line-height:21px; border:1px solid #828282;color:#828282' type='text' onchange='qty(this);' value='1' size='2' name='fileCount' />" +
						"<a class='adds' href='javascript:void(0);' onclick='addPhotoNum(this);'><img src='images/cart_btn_add.png'/></a>" +
						"</form></div>";
				jQuery("#photoDiv").append(imgStr);//上传成功,添加图片信息
				
				//显示已经上传的图片数量
				var uploadNum = jQuery("#uploadNum").text();
				if(isempty(uploadNum))uploadNum=0;
				uploadNum = parseInt(uploadNum,10);
				uploadNum = uploadNum+1;
				jQuery("#uploadNum").text(uploadNum);//添加数量
				
	            start++;
				//延迟1s,这1s用来显示图片信息,避免出现连续上传几次最后一次性显示图片的问题
	            setTimeout(function(){
	            	syncUpload(start,end,IDs);
	            },1000);
	        }
	    });
	}
}; 

注意点

1、传递过来的localId最好也toString()一下,避免上传失败。

2、将选择的图片信息添加到页面的代码最好写在文件上传的方法里,要是单独提出来作为一个方法在这里调用,会出现“文件连续上传几次但是页面不显示图片到最后文件上传的差不多了图片一次性全部加载出来”的问题,同时也可以达到“上传一张显示一张且可以告知文件是否上传成功及上传数量”的效果,后面加的延迟操作也是出于这个考虑。

分享到:
评论

相关推荐

    jdk-8u131-windows-x64

    jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-...

    java-jdk1.8-8u361-all-jdk-win-linux

    java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...

    开发工具 jdk-8u121-windows-i586

    开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8...

    jdk-8u311-windows-x64.exe

    jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...

    jdk-6u39-windows-i586

    jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows...

    jdk-6u21-windows-x64

    jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-...

    jdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windows

    jdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windows

    jdk-8u131-macosx-x64

    jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64jdk-8u131-macosx-x64...

    jdk-7u80-windows-x64安装包

    jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-...

    jdk-11.0.19-linux-x64-bin.tar.gz文件(分享给需要的同学)

    jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_...

    jdk-8u301-linux.zip

    (1)jdk-8u301-linux-aarch64.rpm (2)jdk-8u301-linux-aarch64.tar.gz (3)jdk-8u301-linux-arm32-vfp-hflt.tar.gz (4)jdk-8u301-linux-i586.rpm (5)jdk-8u301-linux-i586.tar.gz (6)jdk-8u301-linux-x64....

    jdk-8u131-windows-i586

    jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586...

    jdk-8u172-windows-x64.exe、jdk-8u251-windows-x64.exe、jdk-14.0.1_windows-x64_bin.e

    三个版本的java jdk分别是:jdk-8u172-windows-x64.exe、jdk-8u251-windows-x64.exe、jdk-14.0.1_windows-x64_bin.exe

    jdk-8u60-windows-i586-JDK1.8-32位

    jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586

    jdk-8u221-windows-x64.rar

    jdk-8u221-windows-x64.exe 支持Win10 64位 jdk-8u221-windows-x64.exe 支持Win10 64位 jdk-8u221-windows-x64.exe 支持Win10 64位 jdk-8u221-windows-x64.exe 支持Win10 64位 jdk-8u221-windows-x64.exe 支持Win10...

    jdk-11.0.4-64bit.zip jdk-11版本

    jdk-11版本安装包、jdk-11版本安装包、jdk-11版本安装包 jdk-11版本安装包、jdk-11版本安装包、jdk-11版本安装包 jdk-11版本安装包、jdk-11版本安装包、jdk-11版本安装包 jdk-11版本安装包、jdk-11版本安装包、jdk-...

    jdk-8u231-windows-x64.exe 安装版

    文件名称:C:\Users\LBWNB\Desktop\jdk-8u231-windows-x64\jdk-8u231-windows-x64.exe 文件大小:220392992 字节 文件版本:8.0.2310.11 修改时间:2019年11月11日 13:31:03 MD5 :F8A35AB83D651DC52CC77B19CD818167...

    jdk-8u131-windows-x32下载【官方纯净版】

    jdk-8u131-windows-x32下载 - 官方纯净版【带环境变量配置 视频教学】 环境变量自己配置方法www.foxconnpx.cn/newsinfo-165.html jdk-8u131-windows-x32下载 - 官方纯净版【带环境变量配置 视频教学】 jdk-8u131-...

    jdk-8u201 windows和linux版本

    内容概要:文件【jdk-8u201 windows和linux版本】解压后内含jdk-8u201-linux-x64.tar.gz、jdk-8u201-windows-x64.exe两个版本的安装包,可以在windows和linux环境进行jdk环境搭建 适合人群:常规Java开发人员以及...

    jdk-8u221-64bit.zip jdk-8版本安装包

    jdk-8版本安装包、 jdk-8版本安装包、 jdk-8版本安装包 jdk-8版本安装包、 jdk-8版本安装包、 jdk-8版本安装包 jdk-8版本安装包、 jdk-8版本安装包、 jdk-8版本安装包 jdk-8版本安装包、 jdk-8版本安装包、 jdk-8...

Global site tag (gtag.js) - Google Analytics