使用restTemplate上传微信素材

给企业微信上传素材时发现微信素材的包体真是复杂,以前还没遇到过,可能是之前的接口都比较简单吧。开始试着上传了几次都是报包体缺失,后面上传上去了,单没法重命名文件名。最終解決,测试代码如下,留着以后备用。


  @PostMapping("/up/3")
    public String v3(MultipartFile file) throws IOException {
        String chaceUrl = StrUtil.format("https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}","B9u5cRWhJ2nRPzc2Ts0tYKAAXGxZH8gxJD3RYHtkFvGgos3GQER--mb7vrZAlQ0k7g292lM8Pj67Qzz48djv05KMrlbvN0rRCTR4uy4HyLFtQAtNj7pfgqylzrygUcQSUYJDUOCWtB7u-W8xkauTvWLs6Py3vRmDBUd-k-juo__jwfX_UUo1nL0yfcQhsbHp9vgxUJC5eX4vdg6im7uvCw");
        //微信报文
        //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--
        //构造请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        //构建下面的请求体
        HttpHeaders pictureHeader = new HttpHeaders();
        //这里根据文件类型设置, 普通文件就是 APPLICATION_OCTET_STREAM , 图片就用IMAGE_PNG
        pictureHeader.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //设置文件名称 经测试不要加后缀
        pictureHeader.setContentDispositionFormData("file","展示的文件名");
        ByteArrayResource bar = new ByteArrayResource(file.getBytes());
        HttpEntity<ByteArrayResource> picturePart = new HttpEntity<>(bar, pictureHeader);
        //组成body
        MultiValueMap<String, Object> multipartRequest = new LinkedMultiValueMap<>();
        multipartRequest.add("file", picturePart);
        //这里的file 代表的是临时素材url参数  &type = XXX ,根据上传的文件类型设置, 企业微信共有4中素材类型 图片,音频 视频,普通文件
        //需要注意的是 这里要和pictureHeader这个请求头里的类型一致,如:IMAGE_PNG ,则这里就是image 否则获取素材时会出错。
        
        multipartRequest.add("type", "file");
        //放body 和 head
        HttpEntity entity = new HttpEntity(multipartRequest, headers);
        //请求微信
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(chaceUrl,entity,String.class);
        System.out.println(responseEntity.getBody());
        return responseEntity.getBody();
//        return null;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值