public void getMaterial(HttpServletRequest request, HttpServletResponse response) throws Exception {
String csid = request.getParameter("csid"); String croptype = request.getParameter("croptype"); String mediaId = request.getParameter("mediaid"); String appid = sysWxBindCorpService.getMpAppIdByCsid(csid, croptype);
InputStream inputStream = weChatMaterialUpload.getMaterialByMediaId(appid, mediaId); //输出流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = 1024; byte tmp[] = new byte[len]; int i; while ((i = inputStream.read(tmp, 0, len)) > 0) { baos.write(tmp, 0, i); } byte imgs[] = baos.toByteArray(); OutputStream stream = response.getOutputStream(); stream.write(imgs); stream.flush(); stream.close();
// 循环取出流中的数据,保存 /* * byte[] data = new byte[1024]; int len = 0; FileOutputStream fileOutputStream * = null; * * String filePath = "D:\\ztech-server\\upload\\A.PNG"; * * try { fileOutputStream = new FileOutputStream(filePath); while ((len = * inputStream.read(data)) != -1) { fileOutputStream.write(data, 0, len); } } * catch (IOException e) { } finally { if (inputStream != null) { try { * inputStream.close(); } catch (IOException e) { } } if (fileOutputStream != * null) { try { fileOutputStream.close(); } catch (IOException e) { } } } */
}
public InputStream getMaterialByMediaId(String appid, String mediaId) throws Exception {
try { String charset = "UTF-8"; String url = MessageFormat.format(GET_MATERIAL_URL, accessToken.getAccessToken(appid)); Map<String, String> baseParam = new HashMap<>(); baseParam.put("media_id", mediaId); byte[] bytes = JSONUtils.toJSONString(baseParam).getBytes(charset); InputStream inputResult = WeChatHttpUtil.Instance().doPostIn(url, bytes, charset, "");
/*InputStream转换成ByteArrayOutputStream 解决InputStream只能读取一次问题(ByteArrayOutputStream转成多个InputStream分别读取)*/ ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inputResult.read(buffer)) > -1) { baos.write(buffer, 0, len); } baos.flush(); /*InputStream转换成ByteArrayOutputStream 解决InputStream只能读取一次问题(ByteArrayOutputStream转成多个InputStream分别读取)*/ inputResult = new ByteArrayInputStream(baos.toByteArray()); InputStream backResult = new ByteArrayInputStream(baos.toByteArray());
String result = IOUtil.toString(backResult, charset); try { JSONObject jsonObject = JSONObject.parseObject(result); if (jsonObject != null && jsonObject.containsKey("errcode") && (jsonObject.get("errcode").equals(40001) || jsonObject.get("errcode").equals(42001) || jsonObject.get("errcode").equals(41001) || jsonObject.get("errcode").equals(40014))) {
// 清除微信token缓存并重试请求 WxTokenCache.setAccessToken(appid, ""); inputResult = WeChatHttpUtil.Instance().doPostIn(url, bytes, charset, "");
} } catch (Exception e) { // TODO: handle exception }
logger.info("getMaterialByMediaId获取素材详情:" result); return inputResult; } catch (Exception e) { logger.error("getMaterialByMediaId:" e.getMessage()); e.printStackTrace(); return null; }
}
public InputStream doPostIn(String url, byte[] params, String charset, String cookie) throws IOException { URL u = new URL(url); HttpURLConnection conn = null; InputStream in = null; try { conn = (HttpURLConnection) u.openConnection(); conn.setRequestMethod("POST"); if (cookie != null) { conn.setRequestProperty("Cookie", cookie); } conn.setConnectTimeout(TIMEOUT_MILLIS); conn.setReadTimeout(TIMEOUT_MILLIS); conn.setDoOutput(true); conn.setDoInput(true); conn.connect();
if (params != null) { OutputStream out = conn.getOutputStream(); out.write(params); out.flush(); out.close(); } int status = conn.getResponseCode(); if (status >= HttpURLConnection.HTTP_BAD_REQUEST) { in = conn.getErrorStream(); } else { in = conn.getInputStream(); } } catch (IOException e) { throw e; } finally { } return in; }
来源:https://www./content-1-424951.html
|