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

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

文档介绍

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

上传附件资源

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

1.更改上传链接

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

html 复制代码
uploadUrl: '/file/weChatUpload', //上传的地址

2.上传附件资源接口

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

参数说明

3.java上传方法

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());

        }

    }

企业微信接口调用方法

java 复制代码
   /**

     * 上传附件资源--朋友圈

     * 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();

                }

            }

        }

    }

返回值对象代码

java 复制代码
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代码,所以在开发时关于上传附件资源这块比较费劲,这里是最后上传成功的版本,希望对大家有帮助,有问题的小伙伴也可以一起讨论哈。

相关推荐
天空属于哈夫克33 天前
企业微信二次开发:精准实现关键词自动回复
架构·企业微信
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
wechatbot8883 天前
极客互动企业微信 SCRM 自动运营平台效果实测
java·微信·企业微信·rpa
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui