开始获取临时素材时,遇到好多问题,下面是问题总结:
1、不知道调用”获取临时素材”接口返回的是什么东西,其实就是返回图片数据流,如果直接用浏览器打开链接(即该接口),就会提示下载图片
2、获取临时素材,返回的信息头部的Content-type是application/json,是因为出错了,可以通过BufferReader读取获取的InputStream,换成字符串,就会提示错误码和错误信息,我这里因为接口地址url写错,然后一直提示access_token无效(地址错误不应该访问不到吗,为啥提示access_token无效,这个还不清楚)。
3、整个流程不懂,其实不难,就是先打开本地图片,然后上传到微信服务器,再获取临时素材,最后上传到oss,下面是oss上传的代码,和前台选择图片并调用后台程序进行上传的脚本
例子:OSS.java
package com.prositech.utils;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import com.aliyun.oss.OSSClient;
import com.google.gson.JsonObject;
public class OSS {
public static void main(String[] args) throws FileNotFoundException
{
String unionid = "*********************";
String media = "***********************";
String accessToken = "***********************"; //默认有效期7200
upload(unionid,media,accessToken);
}
public static String upload(String unionid,String media,String accessToken) {
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// accessKey请登录https://ak-console.aliyun.com/#/查看
String accessKeyId = "****************";
String accessKeySecret = "******************";
String bucketName = "11j";
//这里,图片名字不能写死,得用变量替代,否则上传到阿里云oss后,图片提示损坏,打不开
String key = "clothes/wardrobe/"+unionid+"/"+media+".jpg";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 拼接请求地址
String requestUrl = "https://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", media);
System.out.println(requestUrl);
try {
URL url = new URL(requestUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.connect();
InputStream input = conn.getInputStream();
System.out.println(conn.getResponseMessage());
System.out.print(conn.getContentType());
ossClient.putObject(bucketName, key, input);
conn.disconnect();
} catch (Exception e) {
System.out.println(e);
}
return "success";
}
}
下面是前台的脚本
<script>
function wxScan() {
wx.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
window.location.href=result;
}
});
}
function wxChooseImage(cloth)
{
var accessToken = $("#access_token").attr("value");
wx.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
if(cloth == 1)
$("#coat").attr("src",localIds);
else
$("#paint").attr("src",localIds);
//上传图片到微信服务器,然后从微信服务器转存到阿里云
wx.uploadImage({
localId: localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
var serverId = res.serverId; // 返回图片的服务器端ID
$("#serverId").attr("value",serverId);
$.ajax({
url:'ido.action/uploadImage?media='+serverId+'&accessToken='+accessToken,
type:"get",
success:function(data){
},
error:function(error){
alert(error['responseText']);
}
});
}
});
}
});
}
</script>