From 9f2275a86503cf64a2a98edd7b6ca0e1941cf641 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Tue, 28 May 2019 10:34:34 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=B0=B8=E4=B9=85=E7=B4=A0=E6=9D=90][?= =?UTF-8?q?=E4=BF=AE=E6=94=B9]:=E6=B0=B8=E4=B9=85=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WechatMediaController.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 mlWechatOpen/src/main/java/com/iformall/controller/WechatMediaController.java diff --git a/mlWechatOpen/src/main/java/com/iformall/controller/WechatMediaController.java b/mlWechatOpen/src/main/java/com/iformall/controller/WechatMediaController.java new file mode 100644 index 0000000..ded2a4f --- /dev/null +++ b/mlWechatOpen/src/main/java/com/iformall/controller/WechatMediaController.java @@ -0,0 +1,76 @@ +package com.iformall.controller; + +import com.iformall.service.WxAuthorizerInfoService; +import com.iformall.service.wechat.FmOpenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; + +/** + * Stormeye Wu + */ +@Controller +@RequestMapping("/material") +@Api(description = "微信第三方开放平台素材文件") +public class WechatMediaController { + private final Logger logger = LoggerFactory.getLogger(getClass()); + @Autowired + private FmOpenService openService; + + @Autowired + private WxAuthorizerInfoService authorizerInfoService; + + @ApiOperation(value = "获取永久素材", notes = "") + @GetMapping("/getMedia") + @ApiImplicitParams({ + @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true), + @ApiImplicitParam(name = "mediaId", value = "mediaId", dataType = "String", paramType = "query", required = true)}) + public void getMediaInfo(String appId, String mediaId, HttpServletRequest req, HttpServletResponse response) { + + InputStream inputStream = null; + String filename = mediaId; + try { + WxMpService maService = openService.getWxOpenComponentService().getWxMpServiceByAppid(appId); + inputStream = maService.getMaterialService().materialImageOrVoiceDownload(mediaId); + } catch (WxErrorException e) { + logger.error("获取永久素材失败", e); + throw new RuntimeException(e); + } + + try { + response.reset(); + response.setContentType("application/octet-stream"); + String agent = req.getHeader("user-agent"); + if (agent.contains("Firefox")) { + response.setHeader("Content-disposition", + "attachment; filename=" + + new String(filename.getBytes("GB2312"),"ISO-8859-1")); + } else { + response.setHeader("Content-disposition", + "attachment; filename=" + + java.net.URLEncoder.encode(filename,"UTF-8")); + } + // 循环取出流中的数据 + byte[] b = new byte[1024]; + int len; + while ((len = inputStream.read(b)) > 0) + response.getOutputStream().write(b, 0, len); + inputStream.close(); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } +}