最近做的一个项目刚好用到微信js-sdk的图片上传接口,在这里做一下总结。
在这里能知道使用js api的基本配置https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN
我这里没有用checkJsApi去判断当前客户端版本是否支持指定JS接口,好。通过看开发文档,我们知道调用js接口直接都要通过config接口注入权限验证配置

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

获取config里面参数的代码如下,我这里只用到chooseImage和uploadImage接口,chooseImage接口是拍照或从手机相册中选图接口,uploadImage接口是用来上传图片,所以jsApiList里面只写这两个就可以了

import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;public class WxConfig {public static void main(String[] args) {String jsapi_ticket = "jsapi_ticket";// 注意 URL 一定要动态获取,不能 hardcodeString url = "http://example.com";Map<String, String> ret = sign(jsapi_ticket, url);for (Map.Entry entry : ret.entrySet()) {System.out.println(entry.getKey() + ", " + entry.getValue());}};public static Map<String, String> sign(String jsapi_ticket, String url) {Map<String, String> ret = new HashMap<String, String>();String nonce_str = create_nonce_str();String timestamp = create_timestamp();String string1;String signature = "";//注意这里参数名必须全部小写,且必须有序string1 = "jsapi_ticket=" + jsapi_ticket +"&noncestr=" + nonce_str +"&timestamp=" + timestamp +"&url=" + url;System.out.println(string1);try{MessageDigest crypt = MessageDigest.getInstance("SHA-1");crypt.reset();crypt.update(string1.getBytes("UTF-8"));signature = byteToHex(crypt.digest());}catch (NoSuchAlgorithmException e){e.printStackTrace();}catch (UnsupportedEncodingException e){e.printStackTrace();}ret.put("url", url);ret.put("jsapi_ticket", jsapi_ticket);ret.put("nonceStr", nonce_str);ret.put("timestamp", timestamp);ret.put("signature", signature);return ret;}private static String byteToHex(final byte[] hash) {Formatter formatter = new Formatter();for (byte b : hash){formatter.format("%02x", b);}String result = formatter.toString();formatter.close();return result;}private static String create_nonce_str() {return UUID.randomUUID().toString();}private static String create_timestamp() {return Long.toString(System.currentTimeMillis() / 1000);}
}

ticket可以通过accessToken获取,代码如下

public static String getTicket(String accessToken) throws ParseException, IOException {public final static String sign_ticket_create_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";JSONObject jsonObject = new JSONObject();JSONObject postjson=new JSONObject();String ticket =null;String url = sign_ticket_create_url.replace("ACCESS_TOKEN",accessToken);System.out.print("url="+url);String ticketurl ="";try {jsonObject = WeixinUtil.httpsRequest(url, "POST",postjson.toString());ticket= jsonObject.getString("ticket");System.out.println("ticket:"+ticket);}catch (Exception e) {e.printStackTrace();}return ticket;};

当注入权限验证成功的时候会进入ready接口,那么我们就在ready接口里面继续我们需要的操作

wx.ready(function(){//拍照或从手机相册中选图接口wx.chooseImage({count: 1, // 最多能选择多少张图片,默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有success: function (res) {var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片//上传图片接口wx.uploadImage({localId: localIds.toString(), // 需要上传的图片的本地ID,由chooseImage接口获得isShowProgressTips: 1, // 默认为1,显示进度提示success: function (res) {var serverId = res.serverId; // 返回图片的服务器端ID}});}});});

通过以上代码,我们就已经把图片上传到微信服务器了,但是我们上传到微信服务器的图片只能保存3天,所以上传完之后我们要把图片下载到我们的本地服务器,这里用到微信下载多媒体接口http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
其中media_id就是我们上面的serverId ,所以我们就可以把图片下载到本地了,代码如下

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.URL;
import java.net.URLConnection;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 = WeixinUtil.getAccessToken1().getToken();} 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;}
}

这样就完成了js-sdk图片上传下载了。

微信js-sdk图片上传下载——java完整流程相关推荐

  1. 微信js sdk 授权上传头像下载代码片段和注意事项

    /*  * 描述:当前页授权  * @param url   例:index.html / 如果有参数,需加密index.html?id=1     */ 1.对需要运用js sdk的页面授权 get ...

  2. 微信小程序图片上传到java后台

    前言 关于云存储的文件上传,我想说的真的挺多的,这是一篇纯原创的基于小程序 或者是SpringBoot的云存储的全过程. 整篇教学很细很细,适合于所有的java学习者,特别是刚刚结束学习java想要练 ...

  3. ssm上传文件获取路径_SSM实现图片上传下载功能

    0. 基本步骤框架搭建 实现带图片上传的注册功能 实现下载功能 1. 框架搭建 Step1 创建开发项目 创建基础MVC包结构:controller.service.mapper.pojo Step2 ...

  4. 微信开发h5图片上传(拍照、图片压缩、IOS照片旋转)

    微信开发h5图片上传 开发环境 vue.js,原生h5 input file, 微信公众号网页 依赖安装 exif-js:IOS下拍照照片的方向有问题, 需要exif-js来读取照片信息进行旋转处理: ...

  5. **微信小程序图片上传+后台PHP修改图片名称**

    微信小程序图片上传+后台PHP修改图片名称 前端代码:比较随意 <view class="weui-uploader"><view class="img ...

  6. 如何上传图片到fileupload空间_如何用原生js写图片上传组件v2.0(还有新版本)?...

    js图片上传组件: 基本要求: 1.上传的图片可预览,可删除,可被覆盖更新 2.要求图片格式为jpg和png,大小不能超过2M 新加需求: 1.模拟回显,可用本地存储(实际上的回显是通过后台传过来的u ...

  7. js实现图片上传预览及进度条

    js实现图片上传预览及进度条 原文js实现图片上传预览及进度条 最近在做图片上传的时候,由于产品设计的比较fashion,上网找了比较久还没有现成的,因此自己做了一个,实现的功能如下: 1:去除浏览器 ...

  8. 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题

    微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题 参考文章: (1)微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题 (2)https://www.cnblogs.com/co ...

  9. 微信小程序图片上传九宫格拖拽组件

    微信小程序图片上传&九宫格拖拽组件 前言 图片上传加九宫格拖拽是一个比较常用的组件,常用于发帖或者评论等内容上传模块,我这篇九宫格拖拽的思路是借鉴了一款优雅的小程序拖拽排序组件实现这篇文章 实 ...

最新文章

  1. linux下查看文件编码及修改编码
  2. react 调用组件方法_React源码分析1 — 组件和对象的创建(createClass,createElement)...
  3. java web 连接linux_如何将javaweb项目部署到linux下
  4. GDB中创建要素数据集
  5. 李洪强iOS经典面试题30-一个区分度很大的面试题
  6. 常用电子元器件之一:开关
  7. C#制作KTV点歌系统
  8. 同时被三个面试官面试_工作面试官犯的5个错误
  9. 二维码:Data Matrix和QRCode
  10. 行尸走肉第一季/全集The Walking Dead迅雷下载
  11. 使用html2canvas生成海报
  12. 一物一码(2): 一物一码之【红包那点事】
  13. 如何将mp4视频制作成gif表情包
  14. 【python】使用pandas快速提取腾讯问卷信息,比对未填写的人员的名单
  15. 我的世界服务器回到死亡位置,我的世界返回死亡地点指令是什么
  16. 形式逻辑(普通逻辑)5:直言判断
  17. Java解决时间小时时差问题
  18. 服务器磁盘空间占满了排查原因
  19. Extjs中itemselector组件自定义方法得到displayField值
  20. LTE系统信息 --- 系统信息变更

热门文章

  1. 男子见义勇为追赶小偷致其死亡获缓刑
  2. 小狐狸钱包(metamask)和币安链钱包的联网问题
  3. python爬取饿了么奶茶店外卖数据_喜茶、一点点、古茗…大数据揭秘网红奶茶真实外卖销量...
  4. EBS开发_AME审批流乱码调整
  5. 支付宝兑换的扫地机器人_科沃斯扫地机器人以旧换新怎么换?花钱吗?
  6. 国庆节,回馈粉丝,送8套机械键盘,写代码更得心应手!
  7. Advanced Functional Materials 投稿指南
  8. JS面试(四):对调变量的六种方法
  9. 特斯拉砍掉挡杆,自动驾驶已经开始改变人类?
  10. 非常经典的像素画系列教程