H5活动页面遇到的坑+微信分享代码

2023-05-16

h5活动页面功能:[在手机上微信分享]

1.上传两张图片

2.播放一个背景音乐


很简单是么?那说明你知道的太少了,其实里面的坑好多

一下是制作的心路历程:

坑1、iphone上传照片的时候,因为有oriten的原因,所以传上去旋转了

坑2、安卓autoplay不生效

用js获取图片的oritain值,然后自己旋转裁切

结果发现脚本获取的orita值是错误的,而且


由于要着急上线,所以里面换了一个组件:百度的webuploader

坑一解决:图片上传旋转的问题解决:

坑3:可是因为用了七牛的图片服务,所以安卓遇到了坑,前端传过来的图片留不能写入七牛,


最后没经过调试才发现上面的坑,

解决办法是:在前端却别安卓和iphone 让他们调用不行的服务,如果是iphone直接上传七牛,如果是安卓则先存本地,然后再传七牛,如果七牛上传成功,则返回七牛的地址

如果七牛失败,则保存本地服务器地址。这样就保证图片能传上来


最后问题总算解决:


下面是代码:

jsp

<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 

<% String basepath = request.getContextPath();%>
<!DOCTYPE HTML>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<head>
<meta charset="utf-8">
<meta content="width=640,user-scalable=no" name="viewport">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<!-- <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/> -->

<title>制作告白书</title>

<link rel="stylesheet" type="text/css" href="webuploader/webuploader.css" >
<style>
	*{ margin:0; padding:0;}
	html,body { font-size: 12px; display: block; line-height: normal; font-family:"helvetica"; position: relative;}
	article,aside,dialog,footer,header,section,nav,figure,menu,time,summary{ display: block; }
	img{ border: 0; vertical-align: top;}
	body{background: url(img/bg-repeat.png);  }
	.select:before{  position: absolute;top: 40px;right: 25px;width: 0;height: 0;content: '';border: 15px solid transparent; border-color: transparent;border-top-color: #F29E81; }
	.upload{overflow: hidden;width: 75%;margin: 0 auto; padding: 40px 10%;}
	.upload section{width: 220px;height: 220px;background: #fff;box-shadow: 0 0 15px rgba(0,0,0,0.1); text-align: center; overflow: hidden;position: relative;}
	.upload section:first-child{float: left;}
	.upload section:last-child{float: right;}
	.upload section span{font-size: 32px;color: #F29E80; position: absolute; top: 0;  width: 100%; display: block;}
	.upload input{a
	ppearance: none;-webkit-appearance: none;height: 100%;
	width: 100%; opacity: 0;position: absolute; 
	z-index: 99;
	left: 0;
	top: 0}
	.upload article{width: 100%;height: 100%;position: absolute;left: 0;top: 0;}
	.upload article img{width: 100%;height: auto;}
	.load{width: 100%;height: 100%;background: url(img/load.gif) 50% 50% no-repeat; background-color: rgba(0,0,0,0.7); position: absolute; left: 0;top: 0;z-index: 999;}
</style>
<script type="text/javascript" src="<%=basepath %>/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<%=basepath %>/js/tg.js"></script>
<script type="text/javascript" src="<%=basepath%>/js/yxy.js"></script>
<script type="text/javascript">
 initpage("hd-gb");
</script>

</head>
<body>

<form method="post" action="<%=basepath%>/5/addConfession"  enctype="multipart/form-data"  οnsubmit="return iframeCallback();">
	
	<input type="hidden" id="pichidden_1" name="img1Url">
	<input type="hidden" id="pichidden_2" name="img2Url">
	<div style="padding: 80px 0;"><img src="img/t3.png" style="width: 100%;height: auto;"/></div>
	<div style="width: 75%;margin: 0 auto;box-shadow: 0 0 15px rgba(0,0,0,0.1)">
		<input type="text" id="babyNickname" 
			 name="babyNickname"
			style="
				width: 95%; 
				padding: 0 0 0 5%; 
				height: 88px;
				border: 0;
				background: #fff; 
				color: #F29E80; 
				font-size: 32px;" 
			value="输入宝宝昵称"  
			οnfοcus="if (value =='输入宝宝昵称'){value =''}" 
			οnblur="if (value ==''){value='输入宝宝昵称'}" >
	</div>
	
	<div style="width: 75%;margin: 40px auto 0;box-shadow: 0 0 15px rgba(0,0,0,0.1);position: relative;" class="select">
		<select name="babyRelationship" id="babyRelationship"
			style="
				height: 88px;
				background: #fff;
				width: 100%;
				-webkit-appearance: none;
				border: 0;
				font-size: 32px;
				padding-left: 5%;
				color: #F29E80;">
			<option value="你是宝宝的...">你是宝宝的...</option>
			<option value="爸爸">爸爸</option>
			<option value="妈妈">妈妈</option>
			<option value="其他人">其他亲友</option>
		</select>
	</div>
	
	<div class="upload">
		<section>
			<article>
				<div class="wu-example">
						<div id="fileList" class="uploader-list"></div>
				       <span id="picker">照片1</span>
				</div>
		        <div id="thumb"></div>
			</article>
			<div class="load" id="loading1" style="display: none"></div>
		</section>
		
		<section>
			<article>
				<div class="wu-example">
					<div id="fileList" class="uploader-list"></div>
				       <span id="picker2">照片2</span>
				</div>
		        <div id="thumb2"></div>
			</article>
			<div class="load" id="loading2" style="display: none"></div>
		</section>
	</div>
	<div style="width: 75%;margin: 0 auto;padding: 50px 0 75px;">
		<a href="javascript:void(0)"  
			style="display: block; 
					height: 99px;
					line-height: 99px;
					text-align: center;
					color: #fff;
					font-size: 36px;
					margin:0 0 50px;
					background: #4FC6A4;
					text-decoration: none;" 
					οnclick="clickSubmit();"
			>分享并查看</a>
	</div>

</form>


<script type="text/javascript" src="webuploader/webuploader.nolog.min.js"></script>
<script src="../html5/test/js/ostype.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript" src="<%=basepath %>/js/share.js"></script>
<script type="text/javascript">

	 $("#pichidden_1").val("");
	 $("#pichidden_2").val("");
	 
	
	 
	 $(document).ready(function(){
	 	
	 	var serverUrl ;//默认值
	 
// 	 	alert("1");
		var u = navigator.userAgent;
		if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {//安卓手机
// 			alert("安卓手机");
			serverUrl = "/hd/5/updateHeadImgNew";
		// window.location.href = "mobile/index.html";
		} else if (u.indexOf('iPhone') > -1) {//苹果手机
			// window.location.href = "mobile/index.html";
			serverUrl = "/hd/5/updateHeadImg";
// 			alert("苹果手机");
		} else if (u.indexOf('Windows Phone') > -1) {//winphone手机
// 			alert("winphone手机");
			serverUrl = "/hd/5/updateHeadImg";
		// window.location.href = "mobile/index.html";
		}else{
			serverUrl = "/hd/5/updateHeadImg";
		}
		
// 		alert(serverUrl);
		
		// 	var error1 = false;
// 	var error2 = false;
	var uploader = WebUploader.create({
	    // swf文件路径
	    swf: 'webuploader/Uploader.swf',
	    auto: true,
	    // 文件接收服务端。
	    server: serverUrl,//本地测试地址
	    
// 	    server: '/hd/5/updateHeadImgNew',//线上地址
	    
	    
	    fileVal :'image',
	    
	    //缩略图
	    thumb:{
	        width: 220,
	        height: 220,
	
	        // 图片质量,只有type为`image/jpeg`的时候才有效。
	        quality: 70,
	
	        // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
	        allowMagnify: false,
	
	        // 是否允许裁剪。
	        crop: true,
	
	        // 为空的话则保留原有图片格式。
	        // 否则强制转换成指定的类型。
	        type: 'image/jpeg'
	    },
	    
	    
	    compress:{
	        width: 1000,
	        height: 1000,
	
	        // 图片质量,只有type为`image/jpeg`的时候才有效。
	        quality: 90,
	
	        // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
	        allowMagnify: false,
	
	        // 是否允许裁剪。
	        crop: false,
	
	        // 是否保留头部meta信息。
	        preserveHeaders: true,
	
	        // 如果发现压缩后文件大小比原来还大,则使用原来图片
	        // 此属性可能会影响图片自动纠正功能
	        noCompressIfLarger: false,
	
	        // 单位字节,如果图片大小小于此值,不会采用压缩。
	        compressSize: 0
	    },
	
	    // 选择文件的按钮。可选。
	    // 内部根据当前运行是创建,可能是input元素,也可能是flash.
	    pick: '#picker',
	
	    // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
	    resize: true,
	    
	    //目前移动端有几个重要的 bug 在此列出来以免大家踩坑。
	    
		/*
		上传请求内容为空,这是 android 4 的一个bug,只要 file 的 blob数据修改过,通过 xhr2 去发送就有这个问题。 详情:https://code.google.com/p/android/issues/detail?id=39882
		
		解决方案: 发送的时候采用二进制方案,即 把 sendAsBinary 设置成true, 通过这种方式可以避免这个问题。后端接受需要小改动一下。
		*/
	    
	    sendAsBinary:true,
	    
	    fileNumLimit:1,
	    // 只允许选择图片文件。
	    accept: {
	        title: 'Images',
	        extensions: 'gif,jpg,jpeg,bmp,png',
	        mimeTypes: 'image/*'
	    }
	    
	});


	uploader.on( 'fileQueued', function( file ) {
	    uploader.makeThumb( file, function( error, ret ) {
	        if ( error ) {
	            $li.text('预览错误');
	        } else {
		        $("#picker").first("div").html("");
	        	$("#thumb").html('<img alt="" src="' + ret + '" />');
	        	$("#loading1").show();
	        }
	    });
	
	});

	
	
	uploader.on( 'uploadSuccess', function( file,result ) {
	 	$( '#'+file.id ).addClass('upload-state-done');
		var	 qiuniuurl1 = result.data.usIco;
		$("#pichidden_1").val(qiuniuurl1);
		$("#loading1").hide();
		
	});

	
	
	
	
	
	
	
	var uploader2 = WebUploader.create({
	    // swf文件路径
	    swf: 'webuploader/Uploader.swf',
	    auto: true,
	    // 文件接收服务端。
	    server: serverUrl,//本地
	    
// 	    server: '/hd/5/updateHeadImgNew',// 线上
	    
	    fileVal :'image',
	    
	    //缩略图
	    thumb:{
	        width: 220,
	        height: 220,
	
	        // 图片质量,只有type为`image/jpeg`的时候才有效。
	        quality: 70,
	
	        // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
	        allowMagnify: true,
	
	        // 是否允许裁剪。
	        crop: true,
	
	        // 为空的话则保留原有图片格式。
	        // 否则强制转换成指定的类型。
	        type: 'image/jpeg'
	    },
	    
	    
	    compress:{
	        width: 500,
	        height: 500,
	
	        // 图片质量,只有type为`image/jpeg`的时候才有效。
	        quality: 90,
	
	        // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
	        allowMagnify: false,
	
	        // 是否允许裁剪。
	        crop: false,
	
	        // 是否保留头部meta信息。
	        preserveHeaders: true,
	
	        // 如果发现压缩后文件大小比原来还大,则使用原来图片
	        // 此属性可能会影响图片自动纠正功能
	        noCompressIfLarger: false,
	
	        // 单位字节,如果图片大小小于此值,不会采用压缩。
	        compressSize: 0
	    },
	
	    // 选择文件的按钮。可选。
	    // 内部根据当前运行是创建,可能是input元素,也可能是flash.
	    pick: '#picker2',
	
	    // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
	    resize: true,
	    
	    sendAsBinary:true,
	    fileNumLimit:1,
	     // 只允许选择图片文件。
	    accept: {
	        title: 'Images',
	        extensions: 'gif,jpg,jpeg,bmp,png',
	        mimeTypes: 'image/*'
	    }
	});

		uploader2.on( 'fileQueued', function( file ) {
		
		    uploader2.makeThumb( file, function( error, ret ) {
		        if ( error ) {
		            $li.text('预览错误');
		        } else {
// 		        if(!error2){
	        	
		        	$("#picker2").first("div").html("");
// 	        	}
	        	
		        	$("#thumb2").html('<img alt="" src="' + ret + '" />');
		        	$("#loading2").show();
		        }
		    });
		
		});

		uploader2.on( 'uploadSuccess', function( file,result ) {
			var	 qiuniuurl2 = result.data.usIco;

			$("#pichidden_2").val(qiuniuurl2);

			$("#loading2").hide();

		});
		
		
		
			
		 /*
		   * 注意:
		   * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
		   * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
		   * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
		   *
		   * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
		   * 邮箱地址:weixin-open@qq.com
		   * 邮件主题:【微信JS-SDK反馈】具体问题
		   * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
		   */
	
		$.ajax({
		           type: "post",
				   url: "/hd/common/getWeixinInfo",
				   data:{
				   url:""+window.location
				   },	
				   success: function(msg){
				    reg(msg);
				   }
			}); 
			
			
			
				
		title1 = "陪伴是最长情的告白";
		desc1 = "2015年最大的收获是什么?我终于找到了答案,那就是……";
		image1  = "http://qn.ivybaby.me/@/hd/tu1.jpg";
		link1= "http://m.drcuiyutao.com/hd/5/gb";
		
		wx.ready(function () {
				//默认的图片和文案 
				//默认的图片和文案 
			 share(title1,desc1,link1,image1); 	
	 
	 });
	 
	 
	 
	 
	 
	


		function iframeCallback(){
		   
			var babyNickName = $("#babyNickname").val().trim();
			if(babyNickName==null||babyNickName==""||babyNickName=="输入宝宝昵称"){
				alert("昵称不能为空");
				return false;
			}
			if(babyNickName.length>200){
				alert("昵称不能超过200");
				return false;
			}
			
			var babyRelationship = $("#babyRelationship").val();
			if(babyRelationship=="你是宝宝的..."){
				alert("请选择于宝宝的关系");
				return false;
			}
			
			var pic1 = $("#pichidden_1").val();
			var pic2 = $("#pichidden_2").val();
			if(pic1==""||pic1.length==0){
				alert("照片1没上传");
				return false;
			}
			if(pic2==""||pic2.length==0){
				alert("照片2没上传");
				return false;
			}
			webclick('c');
		
			return true;
		}
		
		function clickSubmit(){
		
			
			$("form").submit();
		}	
		function  reg(ret){
		  wx.config({
		      debug: false,
		      appId: 'wx75e7a5ac23efd495',
		      timestamp: ret.timestamp,
		      nonceStr: ret.nonceStr,
		      signature: ret.signature,
		      jsApiList: [
		        'checkJsApi',
		        'onMenuShareTimeline',
		        'onMenuShareAppMessage',
		        'onMenuShareQQ',
		        'onMenuShareWeibo'
		      ]
		  });
		
		}	
		
		
		


</script>




</body>
</html>




Event5.java

package com.cyt.babyhealth.event.controller;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;

import org.imgscalr.Scalr;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.alibaba.druid.util.Base64;
import com.alibaba.fastjson.JSON;
import com.cyt.babyhealth.event.entity.Confession;
import com.cyt.babyhealth.event.service.ConfessionService;
import com.cyt.babyhealth.event.util.ApiResult;
import com.cyt.babyhealth.event.util.ImageUtil;
import com.cyt.babyhealth.event.util.QiniuUtil;
import com.cyt.core.controller.BaseController;
import com.cyt.core.util.UUIDUtil;
import com.sun.mail.handlers.image_gif;

@Controller
@RequestMapping("/5")
public class Event5Contrller extends BaseController {

	@Resource(name = "confessionServiceImpl")
	private ConfessionService confessionService;
	private final String upurl = "img/event/procession/";

	@RequestMapping(value = "/gb")
	public String index(Integer id, Integer tid) {

		Confession confession = new Confession();
		confession
				.setImg1Url("http://qn.ivybaby.me/@/hd/tu1.jpg");
		confession
				.setImg2Url("http://qn.ivybaby.me/@/hd/tu2.jpg");
		confession.setBabyNickname("你");
		confession.setBabyRelationship("人");

		getRequest().setAttribute("confession", confession);
		return "event5/tomakeConfession";
	}





	@RequestMapping(value = "/cid")
	// @ResponseBody
	public String cid() {
		String p = getRequest().getParameter("p");

		String id = getRequest().getParameter("id");
		Confession confession = confessionService.find(Integer
				.parseInt(id));

		if (confession != null) {
			getRequest().setAttribute("confession", confession);
		}
		if("1".equals(p)){
			getRequest().setAttribute("p", p);
		}
		return "event5/tomakeConfession";
	}



	@RequestMapping(value = "/uploadConfessionImage")
	@ResponseBody
	public ApiResult uploadConfessionImage() throws IOException {
		ApiResult apiResult = new ApiResult();
		String imageUrl = "";
		String base64Img = getRequest().getParameter("base64Img");
		System.out.println(base64Img);
		String lastType = "";
		String[] base64ImgArr = base64Img.split(";");
		if (base64ImgArr.length > 0) {
			String imageType = base64ImgArr[0];
			String[] ImgTypeArr = imageType.split("/");
			if (ImgTypeArr.length == 2) {
				lastType = ImgTypeArr[1];
			}

			String base64Image = base64ImgArr[1].split(",")[1];
			// base64编码字符串解码(后端语言实现),将解码后的二进制数据以二进制的形式保存到服务器上
			byte[] imageByte = Base64.base64ToByteArray(base64Image);

			imageUrl = getQiNiuUrl(imageByte, lastType);
			imageUrl = BASE_QN_URL+imageUrl;
		}
		HashMap m = new HashMap();
		m.put("imageUrl", imageUrl);
		apiResult.setData(m);
		// getRequest().setAttribute("imageUrl", imageUrl);
		return apiResult;
	}

	/**
	 * 制作好以后,自动跳转到分享页面
	 * @param confession
	 * @param request
	 * @param response
	 */
	@RequestMapping(value = "/addConfession")
	@ResponseBody
	public void addConfession(Confession confession,String img1Url,
			MultipartHttpServletRequest request, HttpServletResponse response) {
		String sessionId = request.getSession().getId();
		System.out.println("*********************sessionId:********************"+sessionId);
		System.out.println("confession:"+JSON.toJSONString(confession));
		System.out.println("img1Url:"+img1Url);
		if (confession != null) {
			Confession confessionNew = new Confession();

			confessionNew.setCreateTime(new Date());
			confessionNew.setUpdateTime(new Date());
			confessionNew.setStatus(1);
			// confessionNew.setCreateUid(111);
			// confessionNew.setUpdateUid(ManagerUtil.getAdminId());
			//
			String babyNickName = confession.getBabyNickname();
			String babyRelationship = confession.getBabyRelationship();
			if ("其他人".equals(babyRelationship)) {
				babyRelationship = "人";
			}
			String image1Url = confession.getImg1Url();
			String image2Url = confession.getImg2Url();
			confessionNew.setBabyNickname(babyNickName);
			confessionNew.setBabyRelationship(babyRelationship);
			confessionNew.setImg1Url(image1Url);
			confessionNew.setImg2Url(image2Url);
			confessionNew.setUpdateTime(new Date());

			confessionService.save(confessionNew);
			getRequest().setAttribute("confession", confessionNew);
			getRequest().setAttribute("p", "1");
			try {
				response.sendRedirect("cid?p=1&id="
						+ confessionNew.getId());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
//		return "event5/tomakeConfession";
	}


	@RequestMapping(value = "/previesConfession")
	public String previesConfession(Confession confession) {
		if (confession != null) {
			Confession confessionNew = new Confession();

			confessionNew.setCreateTime(new Date());
			confessionNew.setUpdateTime(new Date());
			confessionNew.setStatus(1);
			// confessionNew.setCreateUid(111);
			// confessionNew.setUpdateUid(ManagerUtil.getAdminId());
			//
			String babyNickName = confession.getBabyNickname();
			String babyRelationship = confession.getBabyRelationship();
			if ("其他人".equals(babyRelationship)) {
				babyRelationship = "人";
			}
			String image1Url = confession.getImg1Url();
			String image2Url = confession.getImg2Url();
			confessionNew.setBabyNickname(babyNickName);
			confessionNew.setBabyRelationship(babyRelationship);
			confessionNew.setImg1Url(image1Url);
			confessionNew.setImg2Url(image2Url);
			confessionNew.setUpdateTime(new Date());

//			confessionService.save(confessionNew);

			getRequest().setAttribute("confession", confession);
		}
		return "event5/tomakeConfession";
	}





	public static byte[] cropBytes(InputStream in, int size) {
		BufferedImage bi = null;
		try {

			// bi = ImageIO.read(new File(srcPath));
			bi = ImageIO.read(in);
			int sWidth = bi.getWidth();
			int sHeight = bi.getHeight();
			int x = 0;
			int y = 0;
			if (sWidth >= sHeight) {
				bi = Scalr.resize(bi, Scalr.Method.QUALITY,
						Scalr.Mode.FIT_TO_HEIGHT, size);
				x = (bi.getWidth() - size) / 2;
			} else {
				bi = Scalr.resize(bi, Scalr.Method.QUALITY,
						Scalr.Mode.FIT_TO_WIDTH, size);
				y = (bi.getHeight() - size) / 2;
			}
			bi = Scalr.crop(bi, x, y, size, size);
			ByteArrayOutputStream out = new ByteArrayOutputStream();

			ImageIO.write(bi,"jpg",  out);
			return out.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}

	public String getQiNiuUrl(byte[] file, String fileType) throws IOException {
		// 上传封面

		String filename = UUIDUtil.getUUID() + "." + fileType;
		if (upurl != null) {

			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd");
			String dateUrl = sdf.format(date);

			String key = upurl + dateUrl + "/" + filename;

			boolean flag = QiniuUtil.IVYBABY.uploadFile(key, file);
			if (flag) {
				return key;

			} else {
				return null;
			}
		} else {
			return null;
		}

	}

//	@RequestMapping("/updateHeadImg")
//	@ResponseBody
//	public ApiResult updateHeadImg(@RequestParam(required = true) MultipartFile image) {
//		ApiResult apiResult = new ApiResult();
//		// 上传文件
//		if (!image.isEmpty()) {
//
//			String filename = UUIDUtil.getUUID() + image.getOriginalFilename();
//
//			String key ="";
//			if (upurl != null) {
//				Date date = new Date();
//				SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd");
//				String dateUrl = sdf.format(date);
//				key = upurl + dateUrl + "/" + filename;
//			}
//			try {
				byte[]  imageByte = this.cropBytes(image.getInputStream(), 420);
//				boolean flag = QiniuUtil.IVYBABY_IMG.uploadFile(key, image.getBytes());
//				System.out.println("上传七牛:" + flag);
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//			apiResult.getData().put("usIco",BASE_QN_URL+key);
//		} else {
//			apiResult.setMsg("图片不能为空");
//		}
//		return apiResult;
//	}
//
	public static final byte[] input2byte(InputStream inStream)
            throws IOException {
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[100];
        int rc = 0;
        while ((rc = inStream.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        byte[] in2b = swapStream.toByteArray();
        return in2b;
    }

	@RequestMapping("/updateHeadImgNew")
	@ResponseBody
	public ApiResult updateHeadImgNew() {
		ApiResult apiResult = new ApiResult();
		
		String imgUrl = "";
		InputStream inputStream = null;
		String bendiPic = "";
		try {
			inputStream = getRequest().getInputStream();
			
			//当前日期
			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd");
			String dateUrl = sdf.format(date);

			String path="/static/imgtest/"+dateUrl;//线上路径
			
//			String path="D://imgtest/"+dateUrl;//测试
			
			//创建文件夹
			File f = new File(path);
			if(!f.exists())
			
				f.mkdirs(); 
			
			
			//上传图片到本地
			bendiPic = path+"/"+UUIDUtil.getUUID()+".png";//线上地址
			
			System.out.println("bendiPic:"+bendiPic);
			
//			BufferedImage image = ImageIO.read(inputStream);
//			ImageIO.write(image, "png", new File(bendiPic));

			//裁切,并保存本地
			ImageUtil.crop(inputStream, 420, bendiPic);
			System.out.println("-----------本地保存路径:-----------"+bendiPic);
			
			//准备key
			String filename = UUIDUtil.getUUID() + ".png";
			String key = upurl + dateUrl + "/" + filename;
			//上传七牛
			boolean flag = QiniuUtil.IVYBABY.uploadFile(key, bendiPic);
			//如果上传七牛失败,则返回本地路径
			if(flag){
				imgUrl = BASE_QN_URL+key+"?imageView2/1/w/420";
			}else{
				//这里做的文件映射,用域名映射上面的真是路径/static/imgtest/xxxxx.png
				imgUrl = "static.ivybaby.me/imgtest/"+bendiPic;
			}
			apiResult.getData().put("usIco",imgUrl);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			apiResult.setMsg("图片不能为空");
			e.printStackTrace();
		}
		
		System.out.println("--------------imageUrl--------------【"+imgUrl+"】");
		return apiResult;
	}

	@RequestMapping("/updateHeadImg")
	@ResponseBody
	public ApiResult updateHeadImg(String name) {
		ApiResult apiResult = new ApiResult();


		byte[] imageByte = null;

		try {
			InputStream inputStream = getRequest().getInputStream();
			imageByte = org.apache.commons.io.IOUtils.toByteArray(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 上传文件
		if (imageByte.length>0) {

			String filename = UUIDUtil.getUUID() + name;

			String key ="";
			if (upurl != null) {
				Date date = new Date();
				SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd");
				String dateUrl = sdf.format(date);
				key = upurl + dateUrl + "/" + filename;
			}
//				byte[]  imageByte = this.cropBytes(image.getInputStream(), 420);
				System.out.println("key------------------------"+key);
				boolean flag = QiniuUtil.IVYBABY.uploadFile(key, imageByte);
				System.out.println("flag:----------------"+flag);
				
				
				System.out.println("上传七牛:" + flag);
			apiResult.getData().put("usIco",BASE_QN_URL+key+"?imageView2/1/w/420");
		} else {
			
			
			
			
			apiResult.setMsg("图片不能为空");
		}
		System.out.println(JSON.toJSONString(apiResult));
		
		return apiResult;
	}

}



微信js:ps:这个需要和域名绑定才能生效

wx.js

 
 function share(title,desc,link,imgUrl){
	 //分享给朋友圈
	 
	  wx.onMenuShareTimeline({
		      title: title,
		      link: link,
		      imgUrl: imgUrl,
		      trigger: function (res) {
		        // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
		       // alert('用户点击分享到朋友圈');
		      },
		      success: function (res) {
		    	  isshow();
		    	  tongji("incrShareNum");
		      //  alert('已分享');
		      },
		      cancel: function (res) {
		      //  alert('已取消');
		      },
		      fail: function (res) {
		       // alert(JSON.stringify(res));
		      }
		    });
	  

	  // 2.1 监听“分享给朋友”,按钮点击、自定义分享内容及分享结果接口
	  wx.onMenuShareAppMessage({
	      title: title,
	      desc: desc,
	      link: link,
	      imgUrl: imgUrl,
	      trigger: function (res) {
	    	  
	        // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
	       // alert('用户点击发送给朋友');
	      },
	      success: function (res) {
	    	  tongji("incrShareNum");
	    	  isshow();
//	    	  alert("aa");
	        //alert('已分享');
	      },
	      cancel: function (res) {
	        //alert('已取消');
	      },
	      fail: function (res) {
	        //alert(JSON.stringify(res));
	      }
	    });
	  
	  wx.onMenuShareQQ({
		  title: title,
	      desc: desc,
	      link: link,
	      imgUrl: imgUrl,
	      trigger: function (res) {
	       // alert('用户点击分享到QQ');
	      },
	      complete: function (res) {
	       // alert(JSON.stringify(res));
	      },
	      success: function (res) {
	      //  alert('已分享');
	    	  isshow()
	    	  tongji("incrShareNum");
	      },
	      cancel: function (res) {
	       // alert('已取消');
	      },
	      fail: function (res) {
	       //alert(JSON.stringify(res));
	      }
	    });
	  
	  wx.onMenuShareWeibo({
		  title: title,
	      desc: desc,
	      link: link,
	      imgUrl: imgUrl,
	      trigger: function (res) {
	        //alert('用户点击分享到微博');
	      },
	      complete: function (res) {
	        //alert(JSON.stringify(res));
	      },
	      success: function (res) {
	    	  tongji("incrShareNum");
	    	  isshow();
	        //alert('已分享');
	      },
	      cancel: function (res) {
	    	  
	       // alert('已取消');
	      },
	      fail: function (res) {
	        //alert(JSON.stringify(res));
	      }
	    }); 
	  
}
 
 function isshow(){
	if( $("#tip-share")!=undefined){
		$("#tip-share").fadeOut(300);
	}	 
	 
 }
 
 
 
 




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H5活动页面遇到的坑+微信分享代码 的相关文章

  • 关于异步,同步,阻塞,非阻塞的理解(转载)

    常规的误区 假设有一个展示用户详情的需求 xff0c 分两步 xff0c 先调用一个HTTP接口拿到详情数据 xff0c 然后使用适合的视图展示详情数据 如果网速很慢 xff0c 代码发起一个HTTP请求后 xff0c 就卡住不动了 xff
  • 程序员的期望与现实

    来自 xff1a 程序员最幽默 xff08 ID xff1a humor1024 xff09 0 我期望的代码 VS 实际代码的工作方式 1 我认为我的代码 VS 项目经理看到的代码 2 我心里想做的架构 VS 我真正写出来的架构 3 开发
  • linux后台执行命令:&和nohup

    当我们在终端或控制台工作时 xff0c 可能不希望由于运行一个作业而占住了屏幕 xff0c 因为可能还有更重要的事情要做 xff0c 比如阅读电子邮件 对于密集访问磁盘的进程 xff0c 我们更希望它能够在每天的非负荷高峰时间段运行 例如凌
  • Java进阶书籍推荐

    学习Java xff0c 书籍是必不可少的学习工具之一 xff0c 尤其是对于自学者而言 废话不多说 xff0c 下边就给大家推荐一些Java进阶的好书 第一部分 xff1a Java语言篇 1 Java编程规范 适合对象 xff1a 初级
  • Linux开机关机执行脚本方法

    1 在 etc rc d init d 下创建脚本 xff0c 要遵守service script的标准 xff1b 例如 xff1a vi etc rc d init d gfs bin bash case 34 1 34 in rest
  • Ubuntu 出现apt-get: Package has no installation candidate问题

    今天在安装软件的时候出现了Package has no installation candidate的问题 xff0c 如 xff1a apt get install lt packagename gt Reading package li
  • 深度学习(2):DenseNet与图片文字识别

    目的 xff1a 基于深度学习算法DenseNet对图片进行文字识别 xff0c 即OCR转换为文字 xff0c 并将图片进行可视化输出 一 DenseNet算法 DenseNet的基本思路与ResNet一致 xff0c 但是它建立的是前面
  • 安装配置vscode

    远程Linux服务器越来越慢 换成vscode开发好了 xff0c 费时操作放在后台运行 xff0c 不影响前端界面 安装VSCode Visual Studio Code 离线安装扩展 先在 Extensions for Visual S
  • Postman传入date类型

    字符串输入格式 xff1a 2021 08 01 00 00 00 Date输入格式 xff1a 2019 09 09 11 20 20 插入到数据库中是DATE类型 xff1a 先获取到参数转为String类型 xff0c 在格式化为Da
  • 《Activity显示界面历险记》—说说View的那些理不清的关系

    前言 在Activity显示View的过程中 xff0c 有一些重要的角色总让人理不清 xff0c 比如PhoneWindow DecorView ViewRootImpl 也常常有面试题会问到 xff0c 他们四者之间的关系 xff1f
  • smartBi数据源连接与业务主题及七大数据集及透视分析与仪表盘四大分析展示经验总结

    smartBi经验总结 数据门户 电脑主题的资源发布后 xff0c 发布的资源可以在数据门户中看到 xff0c 数据门户界面包含 xff1a 首页 xff0c 报表展示目录 xff0c 报表展示明细资源 首页的设置在系统运维中 系统选项 公
  • java 中 Color类

    Color类 Color类是用来封装颜色的 xff0c 在上面的例子中多次用到 使用Color对象较为简单的方法是直接使用Color类提供的预定义的颜色 xff0c 像红色Color red 橙色Color orange等 xff1b 也可
  • C语言位运算符:与、或、异或、取反、左移和右移

    语言位运算符 xff1a 与 或 异或 取反 左移和右移 位运算是指按二进制进行的运算 在系统软件中 xff0c 常常需要处理二进制位的问题 C语言提供了6个位操作运算符 这些运算符只能用于整型操作数 xff0c 即只能用于带符号或无符号的
  • android 打开蓝牙设备 显示已经配对的蓝牙设备 ,并将已配对的蓝牙设备显示在textview中

    xff08 1 xff09 要想使用android 手机的Bluetooth xff0c 需要在androidmanifest文件中加入使用蓝牙的权限 lt uses permission android name 61 34 androi
  • iOS 7 点击按钮切换视图

    xff08 1 xff09 创建一个项目 xff0c 名字为切换视图 xff08 2 xff09 打开Main storyboard文件 xff0c 将视图中的ViewController视图控制器拖动到画布中 xff08 3 xff09
  • Javaweb 入门测试程序(jsp)

    关于进行jsp程序开发的入门测试小程序 xff08 1 xff09 必须的工具软件 java开发工具包jdk 需要进行环境变量的设置 xff0c 有Java开发基础的人这一步一看就懂 xff01 xff08 2 xff09 安装MyEcli
  • 自媒体平台运营的感悟

    1 关键是自媒体平台的定位 西游记中唐僧有着坚定的志向 西天取经 xff0c 普渡众生 抱着这样的初心和宗旨 xff0c 打造了自己的取经团队 一路上历经九九八十一难 xff0c 初心不改 xff0c 终于到达西天 xff0c 取得真经 x
  • 排序方法总结(1)冒泡排序 选择排序

    排序方法是一种基本的 重要的算法 xff0c 排序的方法有很多 xff0c 现把一些基本排序方法的算法和c 代码列出如下 xff0c 供大家思考 xff0c 借鉴 xff0c 进步 在进行排序之前首先要做的一件事就是选择排序的准则 xff0
  • 排序方法总结(2)插入排序

    插入排序 插入排序类和大家玩的纸牌游戏有些类似 xff0c 在发牌的过程的过程中用右手起的牌 xff0c 总是和左手里的排进行比较 xff0c 然后放在恰当的位置 这就是插入排序的思想 以数组为例 xff0c 其算法是 xff1a xff0
  • 关闭IDEA保存后自动添加空格

    IDEA保存后会给每行自动添加空格 xff0c 关闭这个功能

随机推荐

  • 排序方法总结(3)希尔排序

    希尔排序 希尔排序是对插入排序的改进 xff0c 对中等规模的数据排序效率较高 xff01 交换的次数变得少了 xff0c 效率就高了 希尔排序的算法 1 相距为 k 的数据进行比较 xff0c 若不符合排序的条件 xff0c 就进行交换
  • 求阶乘的几种方法

    求阶乘的几种方法 xff08 1 xff09 常规求阶乘 利用循环即可求出 include lt stdio h gt int main int m n i sum 61 1 printf 34 please input one numbe
  • C++sort函数的用法

    C 43 43 sort 函数的用法 近来看了c 43 43 标准库这本书 xff0c 学到了很多 xff0c 就把这其中的一点 C 43 43 sort 函数的用法写下来和大家分享吧 xff01 xff08 一 xff09 为什么要用c
  • Design Patterns Elements of Reusable Object-Oriented Software(一)Introduction(介绍)

    1 Introduction xff08 介绍 xff09 Designing object oriented software is hard and designing reusable object oriented software
  • 排序方法之堆排序

    堆排序的实现 xff08 xff09 创建初始堆 xff08 二 xff09 堆排序 在创建初始堆之前首先要了解一些关于堆的概念 xff0c 还需要了解一些关于平衡二叉树的内容 xff08 1 xff09 堆的节点数 61 n 2 并且是只
  • 使用yum命令在Linux下安装jdk8

    先查看centos下是否有自带的jdk rpm qa grep java 如果有 xff0c 先删除自带的jdk rpm e nodeps 接刚才查看其中带有openjdk的 删除完成 xff0c 使用yum命令安装 yum install
  • rk3588:串口波特率

    开发过程我们一般都需要看串口log协助分析 xff0c 以便分析对应的bug或者优化系统稳定性等问题 xff0c 那每个平台串口波特率都有可能有一定的出入 xff0c 不尽相同 xff0c 而RK3588默认串口波特率是1500000 xf
  • 一文懂交叉熵Cross-Entropy

    本文翻译自https naokishibuya medium com demystifying cross entropy e80e3ad54a8 交叉熵由交叉 xff08 Cross xff09 和熵 xff08 Entropy xff0
  • 数据库中的索引以及作用

    什么是索引 xff1f 答 xff1a 索引是对数据库表中一个或多个列 xff08 例如 xff0c employee 表的姓名 name 列 xff09 的值进行排序的结构 例如这样一个查询 xff1a select from table
  • 手把手教你实现window图片爬虫(一)

    第一篇 xff1a 爬虫设计思路及原理 刚听说爬虫时 xff0c 估计很多人觉得很神奇 xff0c 是什么赋予了它生命力做到在网络上到处爬取的呢 xff1f 等我说完你会恍然大悟 xff0c 其实并没有多高深的技术 xff0c 人人都可以写
  • IDEA PermGen space内存溢出

  • MySql/MariaDB 中文乱码问题

    今天装了MySql 发现换名字了啊 xff0c 结果用的时候出现了乱码 xff0c MariaDB会出现中文乱码 xff0c 解决方法 xff1a 1 xff09 查看数据库编码的方法 MariaDB itat hibernate gt s
  • Synchronized锁详解

    在Java中 xff0c synchronized锁可能是我们最早接触的锁了 xff0c 在 JDK1 5之前synchronized是一个重量级锁 xff0c 相对于juc包中的Lock xff0c synchronized显得比较笨重
  • Windows10开机自动启动VirtualBox(以无界面方式启动)-虚拟机

    以下操作 xff0c 亲测win10下可以开机自启动 xff0c 但未能实现以无界面方式启动 windows 开机启动 虚拟机 以无界面方式启动 桌面上出现了一个快捷方式 右键快捷方式 属性 在目标中添加 type headless 表示
  • ardupilot EKF3核心算法《EKF算法推导》

    目录 文章目录 目录 摘要 1 EKF算法推导 摘要 本节主要记录ardupilot EKF3核心算法 EKF算法推导 的过程 欢迎批评指正 1 EKF算法推导
  • java自带的注解@ PostConstruct

    java注解 64 PostConstructor 1 spring项目加载数据字典 64 PostConstruct注解的方法在项目启动的时候执行这个方法 xff0c 也可以理解为在spring容器启动的时候执行 xff0c 可作为一些数
  • 排序算法总结

    原文链接 https mp weixin qq com s HQg3BzzQfJXcWyltsgOfCQ 本文将采取动态图 43 文字描述 43 正确的java代码实现来讲解以下十大排序算法 xff1a 冒泡排序 选择排序 插入排序 希尔排
  • 关于rebase

    场景复现 xff1a 本来要在refund分支上的修改的代码 xff0c 结果由于分支太多写在了queue分支上 如何恢复queue分支到提交之前的版本 xff1f xff1f 1 git log 找到commitid 2 git rese
  • macOS big sur Navicat Premium12.1.15 无法正常启动

    提示信息 xff1a Navicat Premium 因为出现问题而无法打开 错误日志提示 Dyld Error Message dyld Using shared cache 1E362DBC F66C 3135 BCA0 C1BBAE1
  • H5活动页面遇到的坑+微信分享代码

    h5活动页面功能 xff1a 在手机上微信分享 1 上传两张图片 2 播放一个背景音乐 很简单是么 xff1f 那说明你知道的太少了 xff0c 其实里面的坑好多 一下是制作的心路历程 xff1a 坑1 iphone上传照片的时候 xff0