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()); + } + } +}