ホームページ >WeChat アプレット >WeChatの開発 >写真の選択、写真のアップロード、写真のプレビューとダウンロードのための WeChat jsapi 開発方法
パラメータ
説明 | |
appId | 公式アカウントの一意の識別子アプリケーションID |
timestamp | 署名を生成するタイムスタンプ |
nonceStr | 署名付きランダムを生成するstring |
signature | Signature |
上の表の 4 つのパラメーターは、WeChat jsapi への呼び出しを初期化するための資格情報です。その使用方法は前のセクションで繰り返し説明したため、投稿しません。上記の 4 つのパラメータをここで生成する方法
完全な JSP コードは次のとおりです:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>微信jsapi测试-V型知识库</title> <meta name="viewport" content="width=320.1,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"> <script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"> </script> <scriptsrc="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script> </head> <body> <center><h3>欢迎来到微信jsapi测试界面-V型知识库</h3></center> <p>基础接口之判断当前客户端是否支持指定的js接口</p> <input type="button" value="checkJSAPI" id="checkJsApi"><br> <h3 id="menu-image">图像接口</h3> <span class="desc">拍照或从手机相册中选图接口</span><br> <button class="btn btn_primary" id="chooseImage">chooseImage</button><br> <span class="desc">预览图片接口</span><br> <button class="btn btn_primary" id="previewImage">previewImage</button><br> <span class="desc">上传图片接口</span><br> <button class="btn btn_primary" id="uploadImage">uploadImage</button><br> <span class="desc">下载图片接口</span><br> <button class="btn btn_primary" id="downloadImage">downloadImage</button><br> 显示图片<imgalt=""src=""id="faceImg"data-bd-imgshare-binded="1"> <br> <script type="text/javascript"> wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '${appId}', // 必填,公众号的唯一标识 timestamp: '${ timestamp}' , // 必填,生成签名的时间戳 nonceStr: '${ nonceStr}', // 必填,生成签名的随机串 signature: '${ signature}',// 必填,签名,见附录1 jsApiList: ['checkJsApi', 'chooseImage', 'previewImage', 'uploadImage', 'downloadImage' ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ // 5 图片接口 // 5.1 拍照、本地选图 var images = { localId: [], serverId: [] }; document.querySelector('#chooseImage').onclick = function () { wx.chooseImage({ success: function (res) { images.localId = res.localIds; alert('已选择 ' + res.localIds.length + ' 张图片'); $("#faceImg").attr("src", res.localIds[0]);//显示图片到页面上 } }); }; // 5.2 图片预览 document.querySelector('#previewImage').onclick = function () { wx.previewImage({ current: 'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg', urls: [ 'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg', 'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg', 'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg' ] }); }; // 5.3 上传图片 document.querySelector('#uploadImage').onclick = function () { if (images.localId.length == 0) { alert('请先使用 chooseImage 接口选择图片'); return; } var i = 0, length = images.localId.length; images.serverId = []; function upload() { wx.uploadImage({ localId: images.localId[i], success: function (res) { i++; //alert('已上传:' + i + '/' + length); images.serverId.push(res.serverId); if (i < length) { upload(); } }, fail: function (res) { alert(JSON.stringify(res)); } }); } upload(); }; // 5.4 下载图片 document.querySelector('#downloadImage').onclick = function () { if (images.serverId.length === 0) { alert('请先使用 uploadImage 上传图片'); return; } var i = 0, length = images.serverId.length; images.localId = []; function download() { wx.downloadImage({ serverId: images.serverId[i], success: function (res) { i++; alert('已下载:' + i + '/' + length); images.localId.push(res.localId); if (i < length) { download(); } } }); } download(); }; }); //初始化jsapi接口 状态 wx.error(function (res) { alert("调用微信jsapi返回的状态:"+res.errMsg); }); </script> </body> </html>
1. 上記のコードの HTML ボタン コード関数は非常に明確に説明されています。ボタンをクリックするたびに、js 関数がトリガーされます。 |
3. 上記のコードを通じて、画像を WeChat サーバーにアップロードしましたが、WeChat サーバーにアップロードした画像は 3 日間しか保存できないため、アップロード後、画像をローカル サーバーにダウンロードする必要があります。ここでは、「WeChat に移動」を使用してマルチメディア インターフェイスをダウンロードします http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID ここで、media_id は上記のサーバー ID です。 画像をローカルにダウンロードできるように、コードは次のとおりです
package com.test.weixin; import net.sf.json.JSONObject; import org.apache.log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.Priority; import org.springframework.util.StringUtils; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; /**** * * @author V型知识库 www.vxzsk.com * */ public class DloadImgUtil { /** * 根据内容类型判断文件扩展名 * * @param contentType 内容类型 * @return */ public static String getFileexpandedName(String contentType) { String fileEndWitsh = ""; if ("image/jpeg".equals(contentType)) fileEndWitsh = ".jpg"; else if ("audio/mpeg".equals(contentType)) fileEndWitsh = ".mp3"; else if ("audio/amr".equals(contentType)) fileEndWitsh = ".amr"; else if ("video/mp4".equals(contentType)) fileEndWitsh = ".mp4"; else if ("video/mpeg4".equals(contentType)) fileEndWitsh = ".mp4"; return fileEndWitsh; } /** * 获取媒体文件 * @param accessToken 接口访问凭证 * @param mediaId 媒体文件id * @param savePath 文件在本地服务器上的存储路径 * */ public static String downloadMedia(String accessToken, String mediaId, String savePath) { try { accessToken = DloadImgUtil.getAccessToken(); } catch (IOException e) { e.printStackTrace(); } String filePath = null; // 拼接请求地址 String requestUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"; requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", mediaId); try { URL url = new URL(requestUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setRequestMethod("GET"); if (!savePath.endsWith("/")) { savePath += "/"; } // 根据内容类型获取扩展名 String fileExt = DloadImgUtil .getFileexpandedName(conn.getHeaderField("Content-Type")); // 将mediaId作为文件名 filePath = savePath + mediaId + fileExt; BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); FileOutputStream fos = new FileOutputStream(new File(filePath)); byte[] buf = new byte[8096]; int size = 0; while ((size = bis.read(buf)) != -1) fos.write(buf, 0, size); fos.close(); bis.close(); conn.disconnect(); String info = String.format("下载媒体文件成功,filePath=" + filePath); System.out.println(info); } catch (Exception e) { filePath = null; String error = String.format("下载媒体文件失败:%s", e); System.out.println(error); } return filePath; } /*** * 获取acess_token * 来源www.vxzsk.com * @return */ public static String getAccessToken(){ String appid="你公众号基本设置里的应用id";//应用ID String appSecret="你公众号基本设置里的应用密钥";//(应用密钥) String url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+""; String backData=DloadImgUtil.sendGet(url, "utf-8", 10000); String accessToken = (String) JSONObject.fromObject(backData).get("access_token"); return accessToken; } /*** * 模拟get请求 * @param url * @param charset * @param timeout * @return */ public static String sendGet(String url, String charset, int timeout) { String result = ""; try { URL u = new URL(url); try { URLConnection conn = u.openConnection(); conn.connect(); conn.setConnectTimeout(timeout); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); String line=""; while ((line = in.readLine()) != null) { result = result + line; } in.close(); } catch (IOException e) { return result; } } catch (MalformedURLException e) { return result; } return result; } }
効果の画像は次のとおりです |
画像の詳細を選択してください画像ポップアップの アップロードが成功した後にサーバー ID が返されました
以上が写真の選択、写真のアップロード、写真のプレビューとダウンロードのための WeChat jsapi 開発方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。