微信开发php插件下载图片,微信开发之微信jsapi选择图片,上传图片,预览和下载图片方法...

参数描述

appId公众号的唯一标识 应用id

timestamp生成签名的时间戳

nonceStr生成签名的随机串

signature签名

上述表格中的四个参数是初始化调用微信jsapi的凭证,咱们在前几节已经反复说明如何使用了,在这里就不在贴出如何生成上述四个参数了

完整的jsp代码如下:

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

微信jsapi测试-V型知识库

欢迎来到微信jsapi测试界面-V型知识库

基础接口之判断当前客户端是否支持指定的js接口

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

chooseImage

预览图片接口

previewImage

上传图片接口

uploadImage

下载图片接口

downloadImage

显示图片

wx.config({

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: '${appId}', // 必填,公众号的唯一标识

timestamp: '${ timestamp}' , // 必填,生成签名的时间戳

nonceStr: '${ nonceStr}', // 必填,生成签名的随机串

signature: '${ signature}',// 必填,签名,见附录1

jsApiList: ['checkJsApi',

'chooseImage',

'previewImage',

'uploadImage',

'downloadImage'

] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

});

wx.ready(function(){

// 5 图片接口

// 5.1 拍照、本地选图

var images = {

localId: [],

serverId: []

};

document.querySelector('#chooseImage').onclick = function () {

wx.chooseImage({

success: function (res) {

images.localId = res.localIds;

alert('已选择 ' + res.localIds.length + ' 张图片');

$("#faceImg").attr("src", res.localIds[0]);//显示图片到页面上

}

});

};

// 5.2 图片预览

document.querySelector('#previewImage').onclick = function () {

wx.previewImage({

current: 'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg',

urls: [

'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg',

'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg',

'http://www.vxzsk.com/upload//bf04c9b5-5699-421d-900e-3b68bbe58a8920160816.jpg'

]

});

};

// 5.3 上传图片

document.querySelector('#uploadImage').onclick = function () {

if (images.localId.length == 0) {

alert('请先使用 chooseImage 接口选择图片');

return;

}

var i = 0, length = images.localId.length;

images.serverId = [];

function upload() {

wx.uploadImage({

localId: images.localId[i],

success: function (res) {

i++;

//alert('已上传:' + i + '/' + length);

images.serverId.push(res.serverId);

if (i < length) {

upload();

}

},

fail: function (res) {

alert(JSON.stringify(res));

}

});

}

upload();

};

// 5.4 下载图片

document.querySelector('#downloadImage').onclick = function () {

if (images.serverId.length === 0) {

alert('请先使用 uploadImage 上传图片');

return;

}

var i = 0, length = images.serverId.length;

images.localId = [];

function download() {

wx.downloadImage({

serverId: images.serverId[i],

success: function (res) {

i++;

alert('已下载:' + i + '/' + length);

images.localId.push(res.localId);

if (i < length) {

download();

}

}

});

}

download();

};

});

//初始化jsapi接口 状态

wx.error(function (res) {

alert("调用微信jsapi返回的状态:"+res.errMsg);

});

1,上述代码html按钮代码功能已经描述的很清楚了,每点击一个按钮触发一个js功能函数。

2、点击上传图片按钮之前首先要点击选择图片按钮功能,上传图片成功后会返回serverid,所以本人认为这里非常梗,调用微信jsapi上传接口,我的图片到底上传到哪里去了呢?实际上我们把图片上传到微信服务器上了也就是临时素材里面去了,可登陆微信官方管理平台查看,你也可以调用微信临时素材接口获取图片。

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

,所以我们就可以把图片下载到本地了,代码如下package com.test.weixin;

import net.sf.json.JSONObject;

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.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

/****

*

* @author V型知识库 www.vxzsk.com

*

*/

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 = DloadImgUtil.getAccessToken();

} 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;

}

/***

* 获取acess_token

* 来源www.vxzsk.com

* @return

*/

public static String getAccessToken(){

String appid="你公众号基本设置里的应用id";//应用ID

String appSecret="你公众号基本设置里的应用密钥";//(应用密钥)

String url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+"";

String backData=DloadImgUtil.sendGet(url, "utf-8", 10000);

String accessToken = (String) JSONObject.fromObject(backData).get("access_token");

return accessToken;

}

/***

* 模拟get请求

* @param url

* @param charset

* @param timeout

* @return

*/

public static String sendGet(String url, String charset, int timeout)

{

String result = "";

try

{

URL u = new URL(url);

try

{

URLConnection conn = u.openConnection();

conn.connect();

conn.setConnectTimeout(timeout);

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));

String line="";

while ((line = in.readLine()) != null)

{

result = result + line;

}

in.close();

} catch (IOException e) {

return result;

}

}

catch (MalformedURLException e)

{

return result;

}

return result;

}

}

效果图如下:

ff4409062482a14aebbb42a23afe7518.png

acc2fb4437a97b5004c082a72ef8fc70.png

选择图片弹出的图片详情

b3900974c59539de63649ca1420ef79e.png

a01fc7f15dd91a3ac7d75a84f733cf02.png

上传成功后返回的serverId

45fd31b11e701c5df92ccc78613bca72.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值