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

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

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

文档介绍

创建企业群发的文档地址: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.mzph.cn/pingmian/22289.shtml

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

相关文章

网络服务DHCP的安装

DHCP的安装 检查并且安装dhcp有关软件包 rpm -qc dhcp #检查是否存在dhcp yum install -y dhcp #进行yum安装查看系统的配置文件 切换到对应目录查看相关文件配置&#xff0c;发现是空目录。 将官方提供的example复制到原配置文件中 cp /usr/share/doc/dhcp-4.2.5/dhcpd.…

Python | 链表的基础操作1

面向对象&#xff1a; “对象”实际上是对现实世界中所存在的事物的一种抽象 人拥有着一些静态的特征&#xff0c;比如身高、体重、性别等&#xff0c;也拥有一些动态的行为&#xff0c;比如吃法&#xff0c;睡觉等&#xff0c;而在计算机世界中&#xff0c;我们将之抽象为一个…

什么是室内外一体化定位

室内外一体化定位是一种技术&#xff0c;它允许在室内外环境中对设备或人员进行连续、无缝的定位跟踪。这种技术结合了多种定位技术的优势&#xff0c;以克服单一技术在室内外环境中可能遇到的局限性。 室内外一体化定位通常涉及以下几种技术&#xff1a; 1. 卫星定位系统&am…

汽车软件单元测试分析

汽车软件单元测试概述 随着汽车技术的不断发展,汽车的功能日益复杂,软件在汽车中的作用也变得越来越重要。汽车嵌入式软件的质量直接关系到汽车的安全性、可靠性和性能表现。在这样的背景下,汽车软件单元测试成为了确保软件质量的关键环节。 汽车嵌入式软件单元测试是指对汽…

手撕C语言题典——相交链表

目录 前言 一&#xff0c;思路 1&#xff09;暴力 2)同步指针 二&#xff0c;代码实现 前言 依旧是力扣上的一道题&#xff0c;有许多新思路提供给我们 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/intersection-of-two-linked-li…

Go中字符串转成byte数组,会发生内存拷贝吗?

引言 在Go语言中&#xff0c;字符串和字节切片是两种常见的数据类型&#xff0c;它们在内存中的表现和操作方式有着本质的不同。字符串是不可变的&#xff0c;而字节切片则是可变的。在日常开发中&#xff0c;我们经常需要在这两种类型之间进行转换。那么&#xff0c;当字符串…

c#入门详解:接口详解

接口&#xff08;interface&#xff09; 抽象类中的抽象方法只规定了不能是 private 的&#xff0c;而接口中的“抽象方法”只能是 public 的。这样的成员访问级别就决定了接口的本质&#xff1a;接口是服务消费者和服务提供者之间的契约。既然是契约&#xff0c;那就必须是透…

Message passing mechanism (消息传递机制)

objc_msgSend 是 Objective-C 运行时系统中的一个核心函数&#xff0c;用于实现消息传递机制。在 Objective-C 中&#xff0c;方法调用实际上是消息传递的过程&#xff0c;当你在代码中调用一个方法时&#xff0c;编译器会将其转换为 objc_msgSend 函数的调用。 objc_msgSend …

构建体育直播平台源码:深度解析数据分析模块的核心展示内容

在现代的体育直播平台中&#xff0c;数据分析展示已经成为不可或缺的一部分。如下参考借助“东莞梦幻网络科技”提供的体育直播源码&#xff0c;打造的平台&#xff0c;并通过表格形式为用户列出以下数据分析内容&#xff1a; 1、积分排名&#xff1a;反映了各支队伍在赛季中的…

WPF 委托

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;委托是一种类型安全的函数指针&#xff0c;允许将方法作为参数传递给其他方法&#xff0c;或将方法作为回调方法存储在委托中。委托在WPF中常用于事件处理、数据绑定、命令以及异步编程。 以下是在…

做跨境电商一定要测评吗?

不管是做亚马逊还是虾皮、Lazada、ebay、沃尔玛、Ozon、Allegro、敦煌网、Jumia、Falabella、SHEIN、OnBuy、新蛋、Fnac、eMAG、ManoMano、Fruugo、速卖通、阿里国际、煤炉等跨境电商平台&#xff0c;测评都是成本最低且最有效的一种推广方式 并不是说做电商就一定要去测评&am…

护肤品成分大公开

在追求美丽的道路上&#xff0c;护肤品无疑是我们手中的重要武器。而在这众多护肤品中&#xff0c;胶原蛋白这一成分因其独特的功效和作用&#xff0c;受到了广泛的关注和喜爱。今天&#xff0c;就让我们一起走进胶原蛋白的世界&#xff0c;揭开它的神秘面纱。 一、胶原蛋白是什…

React实现在线预览word报告/本地选择报告预览

标题使用的核心技术点是docx-preview&#xff0c;读取到文件的File对象&#xff0c;用File去做文件展示&#xff0c;这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中&#xff08;上zip已包…

shell 终端打印格式化日志 log::info

代码 logging.sh #!/bin/bash NC\033[0m RED\033[31m GREEN\033[32m YELLOW\033[33m BLUE\033[34mlog::err() {printf "[$(date %Y-%m-%dT%H:%M:%S.%2N%z)][${RED}ERROR${NC}] %b\n" "$" }log::info() {printf "[${GREEN}$(date %Y-%m-%dT%H:%M:%S.%…

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程…

有效的括号-力扣

栈适合用来解决匹配问题。 第一种情况&#xff1a;已经遍历完了字符串&#xff0c;但是栈不为空&#xff0c;说明有相应的左括号没有右括号来匹配&#xff0c;所以return false 第二种情况&#xff1a;遍历字符串匹配的过程中&#xff0c;发现栈里没有要匹配的字符。所以retur…

Keras深度学习框架实战(7):使用YOLOV8和KerasCV进行高效的图像物体识别

1、绪论 1.1 KerasCV简介 KerasCV是一个专注于计算机视觉任务的模块化组件库&#xff0c;基于Keras构建&#xff0c;可与TensorFlow、JAX或PyTorch等框架配合使用。 概念与定位&#xff1a; KerasCV是Keras API的水平扩展&#xff0c;提供了一系列新的第一方Keras对象&#x…

微信短视频怎么收藏?成都鼎茂宏升文化传媒公司

微信短视频怎么收藏&#xff1f;一文教你轻松掌握 随着微信功能的不断升级&#xff0c;微信短视频已经成为我们日常生活中不可或缺的一部分。无论是朋友分享的生活点滴&#xff0c;还是公众号推送的精彩内容&#xff0c;短视频都以其直观、生动的形式&#xff0c;吸引着我们的…

乡村振兴与脱贫攻坚相结合:巩固拓展脱贫攻坚成果,推动乡村全面振兴,建设更加美好的乡村生活

目录 一、引言 二、巩固拓展脱贫攻坚成果 1、精准施策&#xff0c;确保稳定脱贫 2、强化政策支持&#xff0c;巩固脱贫成果 3、激发内生动力&#xff0c;促进持续发展 三、推动乡村全面振兴 1、加快产业发展&#xff0c;增强乡村经济实力 2、推进乡村治理体系和治理能力…

【面试宝藏】Redis 常见面试题解析

Redis 常见面试题解析 1. 什么是 Redis&#xff1f; Redis 是一个开源的内存数据结构存储系统&#xff0c;可以用作数据库、缓存和消息中间件。它支持多种数据结构&#xff0c;如字符串、哈希、列表、集合和有序集合。 2. Redis 的数据类型&#xff1f; Redis 支持以下数据…