SpringBoot实现企业微信上传临时素材


前言

在使用企业微信API接口中,往往开发者需要使用自定义的资源,比如发送本地图片消息,设置通讯录自定义头像等。
为了实现同一资源文件,一次上传可以多次使用,这里提供了素材管理接口:以media_id来标识资源文件,实现文件的上传与下载。


一、上传临时素材

素材上传得到media_id,该media_id仅三天内有效, media_id在同一企业内应用之间可以共享

二、使用步骤

1.引入库

我这里使用了Hutool工具包

<!-- hutool工具包 -->
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.4.6</version>
</dependency>

2.实现代码

需要使用multipart/form-data POST上传文件, 文件标识名为"media"

接口请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

这里的access_token是企业微信的接口调用凭证,怎么获取可以看官方文档,这里不赘述了.

参数说明:

参数是否必须说明
access_token调用接口凭证
type媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)

直接上代码:
Controller接口定义类:

    @PostMapping(value = "/mediaUpload")
    @ApiOperation("上传临时素材")
    public Result mediaUpload(@RequestPart MultipartFile files, @RequestPart String str) {
        log.info("请求参数:{}",str);
        MaterialUploadDTO materialUploadDTO = JSONObject.toJavaObject(JSONObject.parseObject(str),MaterialUploadDTO.class);
        return materialService.mediaUpload(files,materialUploadDTO);
    }

我这里是接收了两个参数,一个是MultipartFile,一个是JSON的字符串,可以根据自己实际情况自行定义.

Service实现层:
MaterialUploadDTO这个是我自己定义的入参,不需要看.主要看发送的请求那里.
官方文档上说明:POST的请求包中,form-data中媒体文件标识,应包含有 filename、filelength、content-type等信息.
官方请求示例:
企业微信官方地址:https://developer.work.weixin.qq.com/document/path/90253

POST https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=accesstoken001&type=file HTTP/1.1
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
Content-Length: 220

---------------------------acebdf13572468
Content-Disposition: form-data; name="media";filename="wework.txt"; filelength=6
Content-Type: application/octet-stream

mytext
---------------------------acebdf13572468--

我们看到他的请求form-data; 后面有接name=“media”,前面就说了这是文件的标识名,固定不变
我们请求当中也设置了,看HttpRequest.post(),这是发送post请求地址。
.form这是设置表单项,一旦有文件加入,表单变为multipart/form-data,第一个参数是名,第二个是需要上传的文件,第三个是文件名称。
.setHttpProxy是我设置的代理,如果不需要可以去掉该参数。

    public Result mediaUpload(MultipartFile files, MaterialUploadDTO materialUploadDTO) {
        Map<String,Object> map = new HashMap<>();
        try {
            String accessToken = "";//获取企业微信的access_token,
            String url = mediaUpload.replace("ACCESS_TOKEN",accessToken).replace("TYPE",materialUploadDTO.getRequestBody().getType());
            String fileName = files.getOriginalFilename();
            String res = HttpRequest.post(url).form("media",files.getBytes(),fileName).setHttpProxy(httpProxyHost,httpProxyPort).execute().body();
            log.info("从企微接口:{}----上传临时素材结果:{}",url,res);
            JSONObject jsonObject = JSONObject.parseObject(res);
            map.put("responseHead",ResponseHead.success("成功!"));
            if(jsonObject.containsKey("errcode") && jsonObject.getInteger("errcode") != 0){
                return Result.success(ResponseHead.error(jsonObject.toJSONString()));
            }
            map.put("responseBody",jsonObject);
        }catch (Exception e){
            log.error("上传临时素材异常:{}",e.getMessage());
            e.printStackTrace();
        }
        return Result.success(map);
    }

最后企业微信会返回media_id,返回格式:

{
   "errcode": 0,
   "errmsg": """type": "image",
   "media_id": "1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0",
   "created_at": "1380000000"
}

参数说明:

参数说明
type媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)
media_id媒体文件上传后获取的唯一标识,3天内有效
created_at媒体文件上传时间戳

总结

上传的媒体文件限制
所有文件size必须大于5个字节
图片(image):10MB,支持JPG,PNG格式
语音(voice) :2MB,播放长度不超过60s,仅支持AMR格式
视频(video) :10MB,支持MP4格式
普通文件(file):20MB

Spring Boot是一个用于简化Spring应用程序开发的框架,它提供了快速启动和开发的能力。企业微信机器人是企业微信中的一个功能,它可以向指定的群聊或个人发送消息,用于自动化通知和交互。 要使用Spring Boot实现企业微信机器人消息,首先需要在企业微信后台获取到机器人的Webhook地址,并在Spring Boot应用程序中编写发送消息的逻辑。可以使用Spring Boot的RestTemplate来发送HTTP请求将消息发送到企业微信机器人的Webhook地址,同时也可以通过实现定时任务或事件监听来自动化消息的发送。 在Spring Boot应用程序中可以编写一个Controller来接收需要发送的消息内容,然后调用RestTemplate发送HTTP POST请求将消息内容发送给企业微信机器人。另外,还可以编写定时任务或事件监听,当满足一定条件时自动发送消息给指定的群聊或个人,实现自动化通知功能。 除了发送文本消息外,还可以通过企业微信机器人的Webhook接口发送图文消息、链接消息、Markdown消息等不同类型的消息。在Spring Boot应用程序中可以根据需求来封装不同类型消息的发送逻辑,以满足企业内部不同场景下的消息通知需求。 总的来说,通过Spring Boot实现企业微信机器人消息功能可以简化开发流程,提高开发效率,同时也可以满足企业内部自动化消息发送的需求,为企业内部的协作和通知提供便利。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值