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