作者:lay2016,来自原文地址
在使用小程序提供的API: createwxaqrcode的时候,后台获取的返回值是一些像乱码的东西。
其实这些东西是二维码的数据流,而且是没有经过base64加密过的。
所以不需要经过base64解密。
直接将数据流保存为JPG或者PNG图片就可以了。
但是怎么保存呢?
我这里提供一下项目中的Java代码:
/**
* 获取二维码请求
* @param request
* @param url
* @param params
* @return 返回二维码地址
*/
public static String getQRCode(HttpServletRequest request, String url, String params){
System.out.println("地址:" + url);
System.out.println("参数:" + params);
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
post.setHeader("Content-Type", "application/json");
post.addHeader("Authorization", "Basic YWRtaW46");
String result = "";
try {
StringEntity s = new StringEntity(params, "utf-8");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
post.setEntity(s);
// 发送请求
HttpResponse httpResponse = client.execute(post);
// 获取响应输入流
InputStream inStream = httpResponse.getEntity().getContent();
String savePath = request.getSession().getServletContext().getRealPath("upload/code");
String fileName = new GuidUtils().newGuid();
String fileExt = ".jpg";
// 如果没有该路径,那么创建一个
File file = new File(savePath);
if (!file.exists()){
file.mkdirs();
}
saveImgInStream(inStream, savePath, fileName, fileExt);
result = "/upload/code/" + fileName + fileExt;
} catch (Exception e) {
System.out.println("请求异常");
throw new RuntimeException(e);
}
return result;
}
/**
* 将输入流保存为图片
* @param stream 输入流
* @param savePath 存储路径
* @param fileName 文件名
* @param fileExt 格式
* @throws Exception
*/
public static void saveImgInStream(InputStream stream, String savePath, String fileName, String fileExt) throws Exception{
// 将输入流保存为图片
byte[] data = new byte[1024];
int len = 0;
FileOutputStream fileOutputStream = null;
String path = savePath + "\\" + fileName + fileExt;
fileOutputStream = new FileOutputStream(path);
while ((len = stream.read(data)) != -1) {
fileOutputStream.write(data, 0, len);
}
// 关闭流
fileOutputStream.close();
}
省略了不少代码,仅供参考