/** * 上传临时素材--群发消息 * https://developer.work.weixin.qq.com/document/path/90253 * 素材上传得到media_id,该media_id仅三天内有效 * media_id在同一企业内应用之间可以共享 * 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file) * @param file * @return */ @Override public WeChatUploadAttachmentResponse uploadMsg(MultipartFile file) { //获取accesstoken String accessToken = getAccessToken(); if (StringUtils.isNotEmpty(accessToken)) { //获取原始上传文件名称 String filename = file.getOriginalFilename(); //获取后缀 'jpg','JPG','png','PNG','mp4','MP4' //,'amr','AMR','txt','pdf','PDF','xlx','xlxs','doc','docx' int i = filename.lastIndexOf("."); String substring = filename.substring(i + 1); String mediaType = ""; if ("jpg".equals(substring) || "JPG".equals(substring) || "png".equals(substring) || "PNG".equals(substring)) { mediaType = "image"; }else if ("mp4".equals(substring) || "MP4".equals(substring)) { mediaType = "video"; }else if ("amr".equals(substring) || "AMR".equals(substring)) { mediaType = "voice"; }else { mediaType = "file"; } //上传临时素材接口地址 String url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token="+accessToken+ "&type="+mediaType; //设置请求头信息 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); File file1 = null; try { //设置文件大小 int length = file.getBytes().length; headers.setContentLength(length); //设置请求包Content-Disposition form-data中媒体文件标识 ContentDisposition contentDisposition = ContentDisposition.builder("form-data").filename(filename).name("media").build(); headers.setContentDisposition(contentDisposition); //MultipartFile 转 File file1 = toFile(file); //获取FileSystemResource FileSystemResource resource = new FileSystemResource(file1); MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); params.add("media", resource); //设置请求包 HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); //post调用企业微信上传临时素材接口 ResponseEntity<String> post = RestUtils.post(url,requestEntity,String.class); if (Objects.nonNull(post)) { //获取返回值 String body = post.getBody(); WeChatUploadAttachmentResponse res = JSON.parseObject(body, WeChatUploadAttachmentResponse.class); return res; } }catch (Exception e) { e.printStackTrace(); }finally { if (file1 != null) { file1.delete(); } } } return null; } //MultipartFile 转 File private File toFile(MultipartFile multipartFile) { //文件上传前的名称 String fileName = multipartFile.getOriginalFilename(); File file = new File(fileName); OutputStream out = null; try{ //获取文件流,以文件流的方式输出到新文件 out = new FileOutputStream(file); byte[] ss = multipartFile.getBytes(); for(int i = 0; i < ss.length; i++){ out.write(ss[i]); } return file; }catch(IOException e){ e.printStackTrace(); return null; }finally { if (out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
评论