企业微信接入系列-上传附件资源

简介: 简述在API接口企业发表内容到客户的朋友圈时上传附件资源的操作

文档介绍

企业发表内容到客户的朋友圈的文档地址:https://developer.work.weixin.qq.com/document/path/93506,在企业发表内容到客户朋友圈的接口中涉及到上传附件资源的操作,具体文档地址:https://developer.work.weixin.qq.com/document/path/95098,本文主要讲述的就是上传附件资源的操作。

上传附件资源

企业微信官方文档关于上传附件资源这一块写的不是很清楚,这里鉴于上传插件太多的情况,我不针对于具体的一款上传插件举例,通俗化来说明

1.更改上传链接

就是说不管你是什么上传插件,在上传链接这里变更一下,同时注意接收上传方法返回的参数

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

2.上传附件资源接口

https://qyapi.weixin.qq.com/cgi-bin/media/upload_attachment?access_token=ACCESS_TOKEN&media_type=TYPE&attachment_type=1

参数说明

image.png

3.java上传方法

    /**
     * 朋友圈图片或者视频上传
     */
    @PostMapping("/file/weChatUpload")
    @ResponseBody
    public AjaxResult weChatUpload(MultipartFile file){
        try
        {
            WeChatUploadAttachmentResponse res = weChatService.uploadAttachment(file);
            if (res != null) {
                AjaxResult ajax = AjaxResult.success();
                ajax.put("fileName", file.getOriginalFilename());
                ajax.put("url", res.getMediaId());
                return ajax;
            }else {
                return AjaxResult.error("上传失败!");
            }
        }
        catch (Exception e)
        {
            return AjaxResult.error(e.getMessage());
        }
    }

企业微信接口调用方法

    /**
     * 上传附件资源--朋友圈
     * https://developer.work.weixin.qq.com/document/path/95098
     *  素材上传得到media_id,该media_id仅三天内有效
     *   media_id在同一企业内应用之间可以共享
     *    朋友圈附件类型,仅支持图片与视频
     * @param file
     * @return
     */
    @Override
    public WeChatUploadAttachmentResponse uploadAttachment(MultipartFile file) {
        //获取accesstoken
        String accessToken = getAccessToken();
        if (StringUtils.isNotEmpty(accessToken)) {
            String filename = file.getOriginalFilename();
            //获取上传文件后缀
            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";
            }
      //上传附件资源接口连接
            String url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload_attachment?access_token="+accessToken+
                    "&attachment_type=1&media_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();
                }
            }
        }
    }

返回值对象代码

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即可,至此企业微信上传附件资源就算完成了。

最后

这里说一下这个上传附件资源,由于企业微信接口文档写的太模糊,又没有上传的demo代码,所以在开发时关于上传附件资源这块比较费劲,这里是最后上传成功的版本,希望对大家有帮助,有问题的小伙伴也可以一起讨论哈。

相关文章
|
1月前
|
小程序 开发工具 开发者
解决微信开发者工具不能使用云开发的资源
解决微信开发者工具不能使用云开发的资源
|
5月前
|
前端开发 小程序 JavaScript
前端,Java,产品经理,微信小程序,Python等资源合集大放送
前端,Java,产品经理,微信小程序,Python等资源合集大放送
41 0
|
8月前
|
小程序 JavaScript API
微信小程序-image组件-选择相册资源案例
在我们企业开发当中经常有个人中心等相关需求,这些需求当中有一个功能点就是用户头像信息,这种信息用户可以选择自己手机当中的资源进行上传并保存设置。本章就是来介绍下这种功能在微信小程序当中该如何进行实现。
105 0
|
9月前
|
存储 JSON 小程序
微信小程序的资源引用方式
微信小程序的资源引用方式
718 0
|
移动开发 小程序 JavaScript
微信小程序开发之多图片上传+.NET WebAPI后端服务保存图片资源
微信小程序开发之多图片上传+.NET WebAPI后端服务保存图片资源
542 0
微信小程序开发之多图片上传+.NET WebAPI后端服务保存图片资源
|
存储 Kubernetes 应用服务中间件
DockOne微信分享(一二三):如何扩展Kubernetes管理的资源对象
本文讲的是DockOne微信分享(一二三):如何扩展Kubernetes管理的资源对象【编者的话】Kubernetes是一套容器化解决方案,也是一套资源管理的架构和标准;本次分享是基于我在饿了么现阶段容器化经验和理念的总结,探讨深化Kubernetes在企业内部的应用的方法, 介绍如何利用开源的API Server框架在企业内部打造和扩展Kubernetes管理的资源对象。
2212 0
|
Web App开发 Java
Java企业微信开发_00_源码及资源汇总贴
一、源码 此系列教程的源码我都放在了github上,欢迎fork以及关注。 传送门:https://github.com/shirayner/WeiXin_QiYe_Demo/tree/master     二、学习资源 1.
1068 0
微信公众号可自主注销 将释放昵称、邮箱等资源
微信官方宣布,即日起,微信公众号可以自主注销,用户在核实身份信息或者验证帐号主体后,可以在公众号后台-“公众号设置”-“原始ID”中,发起注销流程。微信官方表示,个人身份证信息或个人微信号,最多可以绑定5个微信公众号,有不少用户绑定的帐号数已达上限,无法重新注册或绑定新帐号,造成了一些不便。
1188 0

热门文章

最新文章