作者: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();
-
}
省略了不少代码,仅供参考
|