微信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 相关文章推荐
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
通过Javascript创建一个选择文件的对话框代码
Jun 16 Javascript
JavaScript实现列表分页功能特效
May 15 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
Feb 14 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
jquery登录的异步验证操作示例
May 09 jQuery
js实现简单点赞操作
Mar 17 Javascript
js实现抽奖的两种方法
Mar 19 Javascript
JavaScript实现H5接金币功能(实例代码)
Feb 22 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
多广告投放代码 推荐
2006/11/13 Javascript
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
用js编写留言板
2020/03/17 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
python实现Zabbix-API监控
2018/09/17 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python实现图片彩色转化为素描
2019/01/15 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
Python如何定义有可选参数的元类
2020/07/31 Python
python 如何快速复制序列
2020/09/07 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
材料专业大学毕业生自荐书
2014/07/02 职场文书
大学生个人学年总结
2015/02/15 职场文书
护士求职自荐信范文
2015/03/04 职场文书
学校教学工作总结2015
2015/05/19 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript