微信JSSDK上传图片_javascript技巧

前不久微信公开了一些接口,其中有一个uploadImage接口用于上传图片,一般和chooseImage接口配合使用。先调用chooseImage接口让用户选择一张或者多张图片,用户选择完毕后微信会返回被选中图片的id,再把图片id传给uploadImage接口上传图片。

最近做的一个项目,刚好用到了JSSDK,把用到的东西整理下。

先附上微信开发者文档链接:微信开发者文档

主要用到了:

引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

我们需要获取微信js-sdk参数

/**
 * 获取access_token
 *
 * @param appid
 *      凭证
 * @param appsecret
 *      密钥
 * @return
 */
public static WxAccessToken getAccessToken() {
  WxAccessToken accessToken = null;
  String requestUrl = access_token_url.replace("APPID", Setting.getSetting("WX_PL_APP_ID")).replace(
      "APPSECRET", Setting.getSetting("APP_SECRET"));
  JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
  // 如果请求成功
  if (null != jsonObject) {
    try {
      accessToken = new WxAccessToken();
      accessToken.setToken(jsonObject.getString("access_token"));
      accessToken.setExpiresIn(jsonObject.getInt("expires_in"));
    } catch (JSONException e) {
      accessToken = null;
      // 获取token失败
      log.error("获取token失败 errcode:{} errmsg:{}",
          jsonObject.getInt("errcode"),
          jsonObject.getString("errmsg"));
    }
  }
  return accessToken;
}
public static String jsapiTicket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
/**
 * 获取JsTicket
 *
 * @param accessToken
 *      accessToken
 * @return
 */
public static WxJsTicket getJsTicket(String accessToken) {
  WxJsTicket jsTicket = null;
  String url = jsapiTicket.replaceAll("ACCESS_TOKEN", accessToken);
  JSONObject jsonObject = httpRequest(url, "GET", null);
  // 如果请求成功
  if (null != jsonObject) {
    try {
      jsTicket = new WxJsTicket();
      jsTicket.setTicket(jsonObject.getString("ticket"));
      jsTicket.setExpiresIn(jsonObject.getInt("expires_in"));
    } catch (JSONException e) {
      jsTicket = null;
      // 获取token失败
      log.error("获取jsapiTicket失败 errcode:{} errmsg:{}",
          jsonObject.getInt("errcode"),
          jsonObject.getString("errmsg"));
    }
  }
  return jsTicket;
} 

需要注意接口的调用次数是有限制的,需要控制好。

页面的配置

wx.config({
   debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
   appId: "$!{wxsign.get('appId')}", // 必填,公众号的唯一标识
   timestamp: "$!{wxsign.get('timeStamp')}", // 必填,生成签名的时间戳
   nonceStr: "$!{wxsign.get('nonceStr')}", // 必填,生成签名的随机串
   signature: "$!{wxsign.get('signature')}",// 必填,签名,见附录1
   jsApiList: ['checkJsApi',
         'chooseImage',
         'previewImage',
         'uploadImage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
 }); 

 var images = {
  localId: [],
  serverId: []
 }; 

拍照或从手机相册中选图接口

wx.chooseImage({
  count: 1, // 默认9
  sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
  success: function (res) {
    var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
  }
});

上传图片接口

wx.uploadImage({
  localId: '', // 需要上传的图片的本地ID,由chooseImage接口获得
  isShowProgressTips: 1, // 默认为1,显示进度提示
  success: function (res) {
    var serverId = res.serverId; // 返回图片的服务器端ID
  }
});

微信返回的serverid我们需要通过微信api获取真实的图片二进制数据。

/**
 * 获取媒体文件
 *
 * @param accessToken
 *      接口访问凭证
 * @param media_id
 *      媒体文件id
 * */
public static String downloadMedia(String mediaId,HttpServletRequest request) {
  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", WxTokenThread.accessToken.getToken()).replace(
      "MEDIA_ID", mediaId);
  HttpURLConnection conn = null;
  try {
    URL url = new URL(requestUrl);
    conn = (HttpURLConnection) url.openConnection();
    conn.setDoInput(true);
    conn.setRequestMethod("GET");
    conn.setConnectTimeout(30000);
    conn.setReadTimeout(30000);
    BufferedInputStream bis = new BufferedInputStream(
        conn.getInputStream());
    ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
    byte[] buff = new byte[100];
    int rc = 0;
    while ((rc = bis.read(buff, 0, 100)) > 0) {
      swapStream.write(buff, 0, rc);
    }
    byte[] filebyte = swapStream.toByteArray();
    return PictureStore.getInstance().getImageServerUrl() + PictureStore.getInstance().store(filebyte);
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    if(conn != null){
      conn.disconnect();
    }
  }
  return "";
} 

整体上做这个功能还是比较简单的,只不过以前没有接触过微信api。

微信 jssdk 上传多张图片

代码如下:

jssdk

$('#filePicker').on('click', function () {
 wx.chooseImage({
  success: function (res) {
   var localIds = res.localIds;
   syncUpload(localIds);
  }
 });
});
var syncUpload = function(localIds){
 var localId = localIds.pop();
 wx.uploadImage({
  localId: localId,
  isShowProgressTips: 1,
  success: function (res) {
   var serverId = res.serverId; // 返回图片的服务器端ID
   //其他对serverId做处理的代码
   if(localIds.length > 0){
    syncUpload(localIds);
   }
  }
 });
};

本文给大家分享了微信JSSDK上传图片的方法,希望对大家今后的工作学习有所帮助,当然方法也不止以上一种,还有很多,欢迎大家多多分享自己的经验。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jssdk上传图片
微信jssdk上传图片
微信jssdk上传图片、微信jssdk多图片上传、微信jssdk拍照上传php、微信jssdk上传视频、微信jssdk拍照上传,以便于您获取更多的相关知识。

时间: 2024-09-12 10:24:04

微信JSSDK上传图片_javascript技巧的相关文章

php一个文件搞定微信jssdk配置_php技巧

php一个文件搞定微信jssdk配置: 包括缓存,包括https通讯,获取微信access_token,签名什么的都有.但是防范性编程做得比较少,商业用的话,需要完善下代码. 使用姿势 ^ajax(Common.ServerUrl + "GetWX.php", { data: { Type: "config", url: location.href.split('#')[0] }, dataType: 'json', type: 'get', timeout: 50

js实现微信分享代码_javascript技巧

通常自己做的一个页面想通过微信像朋友分享时,展示的标题和描述都是不是自己想要的,自己查了一些资料,原来是通过js来进行控制 展示效果如下: 标题.描述.还有分享的图片都是有js来控制的. js代码如下 <script> var dataForWeixin = { appId: "", MsgImg: "Christmas/201012189457639.gif",//显示图片 TLImg: "Christmas/201012189457639.

基于zepto.js简单实现上传图片_javascript技巧

效果如下: html:  <div class="otherPic"> <div id="showOtherImage"></div> <span class="pull-left position_relative" id="openIdCardImg"> <span class="icon color-blue addPic"></sp

javascript结合fileReader 实现上传图片_javascript技巧

关于File API这里就不详细解释了,小伙伴们自行度娘吧,来我们就要利用文件句柄来读取文件内容,这是通过FileReader来实现的,通过FileReader接口,我们可以异步地将文件内容加载到内存中,赋予某个js变量. 复制代码 代码如下: function getImgSrc(target, callback) {     if (window.FileReader) {         var oPreviewImg = null, oFReader = new window.FileR

关于微信jssdk实现多图片上传的一点心得分享_javascript技巧

一.首先在common.js里封装一个函数,在需要调用jsSDK的页面引用此方法即可实现微信的信息配置 function signatureJSSDK() { var url = window.location.href.split('#')[0];//后台需要此页面的url来生成参数 $.ajax({ url:IPWeiXinJssdk,//调用后台接口,用后台返回的结果来进行微信接口的基础配置 type:"post", dataType:"json", data

require.js+vue开发微信上传图片组件_javascript技巧

由于项目是thinkPHP做后端框架,一直以来都是多页面的后端路由,想使用火热的webpack有点无从下手(原谅我太菜,而且推广vue只有我一个人--),没办法,想把vue用起来,唯有在原来的基础上改进.使用webpack的巨大好处就是可以使用 .vue 这样的单文件来写vue组件,这样每一个组件就是一个 .vue 文件,哪里用上这个组件就引入进来,维护起来确实很爽.然而一直以来项目用的都是require.js,那又想以这样的形式来组织vue组件,还要加上vue-router和vue-resou

微信js-sdk上传与下载图片接口用法示例_javascript技巧

本文实例讲述了微信js-sdk上传与下载图片接口用法.分享给大家供大家参考,具体如下: 前提已经在wx.config()中,将图片接口验证通过. 微信js-sdk 中上传图片接口(uploadImage)和下载图片接口(downloadImage)都是针对微信服务器本身的.以官方文档为准 注: 1.使用chooseImage接口获取到微信客户端图片地址的与都是 weixin://xxxx 2.上传图片有效期3天,可用微信多媒体接口下载图片到自己的服务器,此处获得的 serverId 即 medi

微信jssdk用法汇总_javascript技巧

本文针对微信jssdk用法进行了详细汇总,分享给大家,供大家参考,具体内容如下 1.绑定域名 2.引入js文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK 3.通过config接口注入权限验证

微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】_javascript技巧

本文实例讲述了微信JS-SDK自定义分享功能.分享给大家供大家参考,具体如下: 分享出去的内容,可以通过jssdk进行修改. 1.配置jssdk Wx_config.html <?php import("@.ORG.jssdk"); $jssdk = new JSSDK(C('oauth_config.appid'), C('oauth_config.appsecret')); $signPackage = $jssdk->GetSignPackage(); ?> &