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