企业微信接入系列-上传临时素材

企业微信接入系列-上传临时素材

  • 文档介绍
  • 上传临时素材
  • 写在最后

文档介绍

创建企业群发的文档地址:https://developer.work.weixin.qq.com/document/path/92135,在创建企业群发消息或者群发群消息接口中涉及到上传临时素材的操作,具体文档地址:https://developer.work.weixin.qq.com/document/path/90253,本文主要讲述的就是上传临时素材的操作。

上传临时素材

企业微信官方文档关于上传临时素材这一块的文档和上传附件资源的文档是一样的不是很清楚,这里鉴于上传插件太多的情况,我不针对于具体的一款上传插件举例,通俗化来说明
1.更改上传链接
就是说不管你是什么上传插件,在上传链接这里变更一下,同时注意接收上传方法返回的参数

uploadUrl: '/file/weChatMsgUpload', //上传的地址

2.上传附件资源接口
https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
参数说明
在这里插入图片描述
3.java上传方法

 /*** 群发消息上传* 群发消息上传成功后无法区分文件类型,故需要在上传成功后返回文件类型*/@PostMapping("/file/weChatMsgUpload")@ResponseBodypublic AjaxResult weChatMsgUpload(MultipartFile file){try{WeChatUploadAttachmentResponse res = weChatService.uploadMsg(file);if (res != null) {AjaxResult ajax = AjaxResult.success();ajax.put("fileName", file.getOriginalFilename());ajax.put("url", res.getType()+"@"+res.getMediaId());return ajax;}else {return AjaxResult.error("上传失败!");}}catch (Exception e){return AjaxResult.error(e.getMessage());}}

企业微信上传临时素材接口调用方法

 /*** 上传临时素材--群发消息* https://developer.work.weixin.qq.com/document/path/90253*  素材上传得到media_id,该media_id仅三天内有效*   media_id在同一企业内应用之间可以共享* 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)* @param file* @return*/@Overridepublic WeChatUploadAttachmentResponse uploadMsg(MultipartFile file) {//获取accesstokenString 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 转 Filefile1 = toFile(file);//获取FileSystemResourceFileSystemResource 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  转 Fileprivate 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();}}}}

返回值对象代码

public class WeChatUploadAttachmentResponse extends WeChatResponse{private static final long serialVersionUID = -6462589895169294923L;@ApiField("type")private String type;@ApiField("media_id")private String mediaId;@ApiField("created_at")private Long createdAt;public String getType() {return type;}public void setType(String type) {this.type = type;}public String getMediaId() {return mediaId;}public void setMediaId(String mediaId) {this.mediaId = mediaId;}public Long getCreatedAt() {return createdAt;}public void setCreatedAt(Long createdAt) {this.createdAt = createdAt;}}

上传插件通过页面返回值取出对应的media_id即可,至此企业微信上传附件资源就算完成了。

写在最后

这里说一下这个企业微信上传临时素材接口,整体操作和上传附件资源接口操作相似,只是官方文档接口地址不一样,这里是最后上传成功的版本,希望对大家有帮助,有问题的小伙伴也可以一起讨论哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/340826.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OJ题目【栈和队列】

题目导入 栈&#xff1a; 题目一&#xff1a;有效的括号题目二&#xff1a;用栈实现队列 队列 题目&#xff1a;实现循环队列 栈 题目一 有效的括号 题目要求 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

Julia编程11:变量作用域 Scope of Variables

There are two main types of scopes in Julia, global* scope* and local* scope*. Julia有全局变量作用域和局部变量作用域&#xff0c;函数或者一些结构体、循环体如for等是否内部是局部环境可以参照下表。 ConstructScope typeAllowed withinmodule, baremoduleglobalglo…

边缘计算网关:企业数字化转型的重要支撑-天拓四方

在数字化浪潮席卷全球的今天&#xff0c;企业对于数据处理和传输的需求日益增强。然而&#xff0c;传统的数据处理模式往往依赖于中心化的数据中心&#xff0c;这种方式在处理大量数据时存在延迟高、成本高、安全性差等问题。数据量的激增和实时性要求的提高&#xff0c;使得传…

视频汇聚EasyCVR平台视图库GA/T 1400协议与GB/T 28181协议的区别

在公安和公共安全领域&#xff0c;视频图像信息的应用日益广泛&#xff0c;尤其是在监控、安防和应急指挥等方面。为了实现视频信息的有效传输、接收和处理&#xff0c;GA/T 1400和GB/T 28181这两个协议被广泛应用。虽然两者都服务于视频信息处理的目的&#xff0c;但它们在实际…

智能合约引领:探索Web3的商业革新之路

随着区块链技术的迅速发展&#xff0c;智能合约作为其重要应用之一&#xff0c;正在逐步改变着商业世界的格局。Web3作为下一代互联网的代表&#xff0c;正引领着智能合约在商业领域的广泛应用和创新。本文将深入探讨智能合约在Web3中的作用&#xff0c;以及智能合约如何引领着…

Vue总结

介绍 Vue 是一套前端框架&#xff0c;免除原生IavaScript中的DOM操作&#xff0c;简化书写。基于MVVM(Model-View-ViewModel)思想&#xff0c;实现数据的双向绑定&#xff0c;将编程的关注点放在数据上。框架:是一个半成品软件&#xff0c;是一套可重用的、通用的、软件基础代…

免费,Scratch蓝桥杯比赛历年真题--第15届蓝桥杯STEMA真题-2024年3月份(含答案解析和代码)

第15届蓝桥杯STEMA真题-2024年3月份 一、单选题 答案&#xff1a;D 解析&#xff1a;y坐标正值表示上&#xff0c;负值表示下&#xff0c;故答案为D。 答案&#xff1a;C 解析&#xff1a;18<25为真&#xff0c;或关系表示一真即为真&#xff0c;故答案为C。 答案&#xff…

Excel 将分组头信息填入组内明细行

Excel由多个纵向的分组表组成&#xff0c;组之间由空白行隔开&#xff0c;每组第1、2行的第2格是分组表头&#xff0c;第3行是列头&#xff0c;第1列和第6列数据是空白的&#xff1a; ABCDEF1ATLANTIC SPIRIT2Looe3VesselSpeciesSizeKgDateLocation4POLLACK22.523/04/20245POL…

音视频开发13 FFmpeg 音频 相关格式分析 -- AAC ADTS格式分析

这一节&#xff0c;我们学习常用的音频的格式 AAC&#xff0c;重点是掌握 AAC的传输格式 ADTS 头部的信息&#xff0c;目的是 &#xff1a; 当音频数据有问题的时候&#xff0c;如果是AAC的编码&#xff0c;在分析 头部信息的时候能够根据头部信息 判断问题是否出现在 头部。 A…

京东笔试-校招

2022京东数据分析笔试&#xff08;0821&#xff09; 一、选择题&#xff1a;30道 1.解决数据不平衡的方法主要有&#xff08;pca&#xff1f;&#xff09; 2.等频&#xff08;等宽&#xff09;划分问题 3.参数估计&#xff1a;矩估计与极大似然估计的用法&#xff0c;问题分…

python之生成xmind

今天为啥要说这个呢&#xff0c;因为前几天做接口测试&#xff0c;还要写测试用例&#xff0c;我觉得麻烦&#xff0c;所以我就用了python里面xmind的插件。自动生成了测试用例&#xff0c;数据来源是json。 &#x1f366; 第一步安装 pip install xmind &#x1f366; 第二…

测绘GIS和遥感领域比较好的公众号有哪些

测绘GIS和遥感领域&#xff0c;微信公众号作为信息传播和知识分享的重要渠道&#xff0c;为从业者提供了一个快速获取行业动态、技术进展和职业发展机会的平台。分享一些在测绘GIS和遥感领域表现突出的公众号推荐&#xff1a; 1. 慧天地&#xff1a;慧天地是一个知名的测绘公众…

纯js仿淘宝多图片封面图插件模板/带视频,带放大镜,带前后端完整代码PHP

功能预览,他依赖jq插件,请自已引入 类似这样 <script type"text/javascript" src"/Application/Admin/Static/js/jquery-2.0.3.min.js"></script>一,前端模板代码 <!--多图功能--><style> charset "utf-8"; .wrap_imgs…

【设计模式深度剖析】【1】【行为型】【模板方法模式】| 以烹饪过程为例加深理解

&#x1f448;️上一篇:结构型设计模式对比 文章目录 模板方法模式定义英文原话直译如何理解呢&#xff1f; 2个角色类图代码示例 应用优点缺点使用场景 示例解析&#xff1a;以烹饪过程为例类图代码示例 模板方法模式 模板方法模式&#xff08;Template Method Pattern&…

MySQL 关键特性一:插入缓冲、双写缓冲

前言 ​ 本文主要介绍 mysql 的几大特性之几&#xff0c;如&#xff1a;双写缓冲和插入缓存。 双写缓冲 基本概念 ​ 双写缓冲&#xff08;doublewrite buffer&#xff09;是MySQL/InnoDB中用于支持原子页面更新的一种机制。在传统的数据库系统中&#xff0c;为了保证数据的…

计网ppt标黄知识点整理第(4)章节——谢希仁版本、期末复习自用

路由器&#xff1a;查找转发表&#xff0c;转发分组。 IP网的意义&#xff1a;当互联网上的主机进行通信时&#xff0c;就好像在一个网络上通信一样&#xff0c;看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议&#xff0c;那么就…

VB.net实战(VSTO):Excel插件的安装与卸载

1. 安装 1.1编程环境&#xff1a;Visual Studio 2022 1.2创建新项目&#xff1a; 1.3 加入一行测试程序&#xff1a;MsgBox&#xff08;“hello”&#xff09;&#xff0c;点击启动&#xff0c;确认可以弹窗 1.4 点击发布 1.5 找到安装程序&#xff0c;点击安装。打开Excel程…

radsystems教程的基本使用之时间字段范围检索

前言&#xff1a; 根据之前的文章&#xff0c;我相信大部分人都能够做到&#xff0c;页面的数据展示&#xff0c;基本的查询功能。我们知道的是这个数值范围检索是非常容易实现的&#xff0c;但是这个时间字段范围检索并不是很如愿。 细心的朋友会发现每次用Date Fied这个组件…

Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发家政服务

Java18​App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码&#xff0c;一站式家政服务平台开发 家政服务 家政服务是一个专为家政服务人员设计的平台&#xff0c;该平台旨在提供便捷、高效的工作机会&#xff0c;同时确保服务质量和客户体验。 以下是关于家政服务师…