公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。通过本接口,公众号可以新增临时素材(即上传临时多媒体文件)。
1、官方文档新增临时素材
https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html
新增永久素材
https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Adding_Permanent_Assets.html2、基于WxJava实现素材上传
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.material.WxMpMaterial;
import me.chanjar.weixin.mp.bean.material.WxMpMaterialUploadResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
@RestController
@RequestMapping("wx/mp/media")
public class WxMpMediaController {
@Autowired
private WxMpService wxMpService;
@GetMapping("uploadTemp")
public String uploadTemp() throws WxErrorException {
File file = new File("E:\图片素材\logo.png");
WxMediaUploadResult wxMediaUploadResult = wxMpService.getMaterialService().mediaUpload(WxConsts.MediaFileType.IMAGE, file);
return "上传临时素材成功:mediaId:" + wxMediaUploadResult.getMediaId();
}
@GetMapping("uploadPermanent")
public String uploadPermanent() throws WxErrorException {
File file = new File("E:\图片素材\logo.png");
WxMpMaterial wxMpMaterial = new WxMpMaterial();
wxMpMaterial.setFile(file);
wxMpMaterial.setName("logo");
WxMpMaterialUploadResult wxMpMaterialUploadResult = wxMpService.getMaterialService().materialFileUpload(WxConsts.MediaFileType.IMAGE, wxMpMaterial);
return "上传永久素材成功:mediaId:" + wxMpMaterialUploadResult.getMediaId();
}
}
素材分为临时素材和永久素材,临时素材在微信后台保存时间为3天,即3天后media_id失效永久素材数量有上限:图文消息素材、图片素材上限为100000,其他类型为1000永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽) 3、测试素材上传
1、访问接口上传临时素材:
localhost:8080/wx/mp/media/uploadTemp
上传成功,返回了 mediaId,我们可以用 mediaId 给用户发送消息,在下面会介绍
2、访问接口上传永久素材
localhost:8080/wx/mp/media/uploadPermanent4、使用上传的素材被动回复用户消息
在前面的文章:【微信开发】4、SpringBoot整合WxJava处理微信消息、事件推送 中提到我们会接收到用户发给公众号的消息,其中包括了事件和消息,当用户给我们发送图片的时候,我们也给用户回复一张图片,伪代码如下:
if (messageType.equals("image")) {
WxMpXmlOutImageMessage images = WxMpXmlOutMessage.IMAGE()
// 获取上传到微信服务器的临时素材mediaid.
.mediaId("Qk_d9_yDnYMakjCQopymJmyXewzIhySCyfcEuPNnYkRjboribry9pj22DHLCAuPt")
.fromUser(touser)
.toUser(fromUser)
.build();
String result = images.toXml();
System.out.println("响应给用户的消息:" + result);
return result;
}
其中 mediaId 为我们上传的素材 mediaId,永久和临时素材都可以,下面我们进行测试:
可以看到,用户发送图片消息给公众号后,公众号成功返回了图片信息,证明我们的素材已经上传成功了
如您在阅读中发现不足,欢迎留言!!!



