微信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 相关文章推荐
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
JS实现图片翻书效果示例代码
Sep 09 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
javascript先序遍历DOM树的方法
Feb 27 Javascript
Javascript中常见的逻辑题和解决方法
Sep 17 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
jQuery实现的页面弹幕效果【测试可用】
Aug 17 jQuery
jQuery层叠选择器用法实例分析
Jun 28 jQuery
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
Sep 04 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 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输入流php://input介绍
2012/09/18 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
javascript 自定义回调函数示例代码
2014/09/26 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
了解重排与重绘
2019/05/29 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
Python的Flask框架与数据库连接的教程
2015/04/20 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python+ffmpeg视频并发直播压力测试
2018/03/06 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
关于递归的一道.NET面试题
2013/05/12 面试题
煤矿安全生产标语
2014/06/06 职场文书
借条格式范本
2015/05/25 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL