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


Posted in Javascript onOctober 12, 2016

本文实例讲述了微信js-sdk上传与下载图片接口用法。分享给大家供大家参考,具体如下:

前提已经在wx.config()中,将图片接口验证通过。

微信js-sdk 中上传图片接口(uploadImage)和下载图片接口(downloadImage)都是针对微信服务器本身的。以官方文档为准

注:

1.使用chooseImage接口获取到微信客户端图片地址的与都是 weixin://xxxx

2.上传图片有效期3天,可用微信多媒体接口下载图片到自己的服务器,此处获得的 serverId 即 media_id,参考文档 http://mp.weixin.qq.com/wiki/12/58bfcfabbd501c7cd77c19bd9cfa8354.html

3.目前多媒体文件下载接口的频率限制为10000次/天,如需要调高频率,请邮件weixin-open@qq.com,邮件主题为【申请多媒体接口调用量】,请对你的项目进行简单描述,附上产品体验链接,并对用户量和使用量进行说明。

实例1、选择单个图片并上传到微信服务器

//选择图片单个图片
wx.chooseImage({
  count: 1, // 默认9
  sizeType: ['original'],
  sourceType: ['album', 'camera'],
  success: function (res) {
    var localId= res.localIds[0];
    $('#localId').text(localId);
    //选择图片成功,上传到微信服务器
    wx.uploadImage({
      localId: localId, // 需要上传的图片的本地ID,由chooseImage接口获得
      isShowProgressTips: 1, // 默认为1,显示进度提示
      success: function (res) {
        var serverId = res.serverId; // 返回图片的服务器端ID
        $('#serverId').text(serverId);
      }
    });
  }
});

实例2、下载,刚上传的图片,指定serverID

var serverId=$('#serverId').text();
wx.downloadImage({
  serverId: serverId, // 需要下载的图片的服务器端ID,由uploadImage接口获得
  isShowProgressTips: 1, // 默认为1,显示进度提示
  success: function (res) {
    var localId = res.localId; // 返回图片下载后的本地ID
    $('#imgTarget').attr('src',localId);
  }
});

从微信客户端获取用户文件,方法2,
可以使用html的File文件域,读取客户端文件,然后上传到服务器

<div class="container">
  <!--图片类型验证方法1-->
  <input type="file" id="file" multiple accept="image/*" />
  <input type="button" id="btn1" value="选择上传文件" onclick="showFiles();" />
  <h4>选择文件如下:</h4>
  <img src="" id="img1" />
</div>

Js代码:

//读取图片,并上传到服务器实例
var fileBox = document.getElementById('file');
function showFiles() {
  //获取选择文件的数组
  var fileList = fileBox.files;
  for (var i = 0; i < fileList.length; i++) {
    var file = fileList[i];
    //图片类型验证第二种方式
    if (/image\/\w+/.test(file.type))
      readFile(file);
    else
      console.log(file.name + ':不是图片');
  }
}
//读取图片内容 为DataURL
function readFile(file) {
  var reader = new FileReader();
  reader.readAsDataURL(file);
  reader.onload = function (e) {
    var result = reader.result;
    $('#img1').attr('src', result)
    upload(result);
  }
  //上传到自己的服务器
  function upload(dataUrl){
    var data=dataUrl.split(',')[1];
    //数据结果是转换,转换成二进制数据
    data=window.atob(data);
    var uint=new Uint8Array(data.length)
    for (var i = 0; i < data.length; i++) {
      uint[i]=data.charCodeAt(i);
    }
    var blob=new Blob([uint],{type:'image/jpeg'});
    //上传到服务器
    var fd=new FormData();
    fd.append('file',blob);
    fd.append('isclip', '-1');
    fd.append('maxsize', 1024*1024*10);
    fd.append('minsize', 0);
    fd.append('subfolder', '1');
    fd.append('automove',true);
    fd.append('extention', '.jpg');
    alert('开始上传');
    var xhr = new XMLHttpRequest();
    xhr.open('post', '/common/upload', true);
    //监听事件
    xhr.onreadystatechange = function (e) {
      if (xhr.readyState == 4 && xhr.status == 200) {
        var data = eval('(' + xhr.responseText + ')');
        if (data.success == true) {
          alert('上传成功:');
          alert(data.msg);
        } else {
          alert(data.msg);
        }
      } else {
        //alert(xhr.readyState);
      }
    }
    xhr.send(fd);
  }
}

读取客户端图片,方法3,目前无效,代码仅供参考

wx.chooseImage({
  count: 1, // 默认9
  sizeType: ['original'],
  sourceType: ['album', 'camera'],
  success: function (res) {
    var localId= res.localIds[0];
    //获取图片对象
    try {
      var img=new Image();
      //此设置在微信浏览器中无效,也不会抛出异常,后面的代码不会执行
      img.setAttribute('crossOrigin', 'anonymous');
      img.onload=function(){
        var canvas=document.getElementById('canvasOne');
        var ctx=canvas.getContext('2d');
        canvas.width=img.width;
        canvas.height=img.height;
        ctx.clearRect(0,0,canvas.width,canvas.height);
        ctx.drawImage(img,0,0,img.width,img.height);
        try {
          upload(canvas);
        } catch (e) {
          alert(e.name);
          alert(e.message);
        }
      }
      img.src=localId;
    } catch (e) {
      alert(e.name);
      alert(e.message);
    }
  }
});
//上传到自己的服务器
function upload(canvas){
  //由于toDataURL()的浏览器安全问题,如果不是同一个域的图片会抛出异常
  //所以此处
  var data=canvas.toDataURL('image/jpeg');
  data=data.split(',')[1];
  alert(data.length);
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 全等号运算符使用说明
May 31 Javascript
循环 vs 递归浅谈
Feb 28 Javascript
javascript里绝对用的上的字符分割函数总结
Jul 31 Javascript
简介JavaScript中valueOf()方法的使用
Jun 05 Javascript
基于javascript实现窗口抖动效果
Jan 03 Javascript
jQuery div拖拽用法实例
Jan 14 Javascript
pc加载更多功能和移动端下拉刷新加载数据
Nov 07 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
在vue中使用echarts图表实例代码详解
Oct 22 Javascript
微信小程序实现留言板(Storage)
Nov 02 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 #Javascript
webpack+vue.js快速入门教程
Oct 12 #Javascript
jquery 抽奖小程序实现代码
Oct 12 #Javascript
微信js-sdk地理位置接口用法示例
Oct 12 #Javascript
vue.js表格组件开发的实例详解
Oct 12 #Javascript
JavaScript实现页面定时刷新(定时器,meta)
Oct 12 #Javascript
基于Javascript实现文件实时加载进度的方法
Oct 12 #Javascript
You might like
php的curl封装类用法实例
2014/11/07 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
php无限级分类实现方法分析
2016/10/19 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
javascript中的括号()用法小结
2014/04/14 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
python处理excel绘制雷达图
2019/10/18 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
物流管理专业职业生涯规划书
2014/01/06 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
应用外语系自荐信
2014/06/26 职场文书
医院护士工作检讨书
2014/10/26 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
javascript之Object.assign()的痛点分析
2022/03/03 Javascript