java 获取永久素材_微信素材获取(JAVA)

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 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.icode9.com/content-1-424951.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值