`
wusuoya
  • 浏览: 637691 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

微信企业号上传下载多媒体文件接口详解演示-java

    博客分类:
  • SSH
阅读更多

企业在使用接口时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。通过本接口,企业可以上传或下载多媒体文件。

 

注意,每个多媒体文件(media_id)会在上传到微信服务器3天后自动删除,以节省服务器资源

 

上传媒体文件:

 

[java] view plaincopy
 
  1. /** 
  2.  * 上传媒体文件 
  3.  * @param accessToken 接口访问凭证 
  4.  * @param type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file) 
  5.  * @param media form-data中媒体文件标识,有filename、filelength、content-type等信息 
  6.  * @param mediaFileUrl 媒体文件的url 
  7.  * 上传的媒体文件限制 
  8.     * 图片(image):1MB,支持JPG格式 
  9.     * 语音(voice):2MB,播放长度不超过60s,支持AMR格式 
  10.     * 视频(video):10MB,支持MP4格式 
  11.     * 普通文件(file):10MB 
  12.  * */  
  13. public static WeixinMedia uploadMedia(String accessToken, String type, String mediaFileUrl) {  
  14.     WeixinMedia weixinMedia = null;  
  15.     // 拼装请求地址  
  16.     String uploadMediaUrl = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE";  
  17.     uploadMediaUrl = uploadMediaUrl.replace("ACCESS_TOKEN", accessToken).replace("TYPE", type);  
  18.   
  19.     // 定义数据分隔符  
  20.     String boundary = "------------7da2e536604c8";  
  21.     try {  
  22.         URL uploadUrl = new URL(uploadMediaUrl);  
  23.         HttpURLConnection uploadConn = (HttpURLConnection) uploadUrl.openConnection();  
  24.         uploadConn.setDoOutput(true);  
  25.         uploadConn.setDoInput(true);  
  26.         uploadConn.setRequestMethod("POST");  
  27.         // 设置请求头Content-Type  
  28.         uploadConn.setRequestProperty("Content-Type""multipart/form-data;boundary=" + boundary);  
  29.         // 获取媒体文件上传的输出流(往微信服务器写数据)  
  30.         OutputStream outputStream = uploadConn.getOutputStream();  
  31.   
  32.         URL mediaUrl = new URL(mediaFileUrl);  
  33.         HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();  
  34.         meidaConn.setDoOutput(true);  
  35.         meidaConn.setRequestMethod("GET");  
  36.   
  37.         // 从请求头中获取内容类型  
  38.         String contentType = meidaConn.getHeaderField("Content-Type");  
  39.         // 根据内容类型判断文件扩展名  
  40.         String fileExt = WeixinUtil.getFileEndWitsh(contentType);  
  41.         // 请求体开始  
  42.         outputStream.write(("--" + boundary + "\r\n").getBytes());  
  43.         outputStream.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"file1%s\"\r\n", fileExt).getBytes());  
  44.         outputStream.write(String.format("Content-Type: %s\r\n\r\n", contentType).getBytes());  
  45.   
  46.         // 获取媒体文件的输入流(读取文件)  
  47.         BufferedInputStream bis = new BufferedInputStream(meidaConn.getInputStream());  
  48.         byte[] buf = new byte[8096];  
  49.         int size = 0;  
  50.         while ((size = bis.read(buf)) != -1) {  
  51.             // 将媒体文件写到输出流(往微信服务器写数据)  
  52.             outputStream.write(buf, 0, size);  
  53.         }  
  54.         // 请求体结束  
  55.         outputStream.write(("\r\n--" + boundary + "--\r\n").getBytes());  
  56.         outputStream.close();  
  57.         bis.close();  
  58.         meidaConn.disconnect();  
  59.   
  60.         // 获取媒体文件上传的输入流(从微信服务器读数据)  
  61.         InputStream inputStream = uploadConn.getInputStream();  
  62.         InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
  63.         BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  64.         StringBuffer buffer = new StringBuffer();  
  65.         String str = null;  
  66.         while ((str = bufferedReader.readLine()) != null) {  
  67.             buffer.append(str);  
  68.         }  
  69.         bufferedReader.close();  
  70.         inputStreamReader.close();  
  71.         // 释放资源  
  72.         inputStream.close();  
  73.         inputStream = null;  
  74.         uploadConn.disconnect();  
  75.   
  76.         // 使用JSON-lib解析返回结果  
  77.         JSONObject jsonObject = JSONObject.fromObject(buffer.toString());  
  78.         // 测试打印结果  
  79.         System.out.println("打印测试结果"+jsonObject);  
  80.         weixinMedia = new WeixinMedia();  
  81.         weixinMedia.setType(jsonObject.getString("type"));  
  82.         // type等于 缩略图(thumb) 时的返回结果和其它类型不一样  
  83.         if ("thumb".equals(type))  
  84.             weixinMedia.setMediaId(jsonObject.getString("thumb_media_id"));  
  85.         else  
  86.             weixinMedia.setMediaId(jsonObject.getString("media_id"));  
  87.             weixinMedia.setCreatedAt(jsonObject.getInt("created_at"));  
  88.     } catch (Exception e) {  
  89.         weixinMedia = null;  
  90.         String error = String.format("上传媒体文件失败:%s", e);  
  91.         System.out.println(error);  
  92.     }  
  93.     return weixinMedia;  
  94. }  


下载媒体文件:

 

 

[java] view plaincopy
 
  1. /** 
  2.      * 获取媒体文件 
  3.      * @param accessToken 接口访问凭证 
  4.      * @param media_id 媒体文件id 
  5.      * @param savePath 文件在服务器上的存储路径 
  6.      * */  
  7.     public static String downloadMedia(String accessToken, String mediaId, String savePath) {  
  8.         String filePath = null;  
  9.         // 拼接请求地址  
  10.         String requestUrl = "https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";  
  11.         requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", mediaId);  
  12.         System.out.println(requestUrl);  
  13.         try {  
  14.             URL url = new URL(requestUrl);  
  15.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  16.             conn.setDoInput(true);  
  17.             conn.setRequestMethod("GET");  
  18.   
  19.             if (!savePath.endsWith("/")) {  
  20.                 savePath += "/";  
  21.             }  
  22.             // 根据内容类型获取扩展名  
  23.             String fileExt = WeixinUtil.getFileEndWitsh(conn.getHeaderField("Content-Type"));  
  24.             // 将mediaId作为文件名  
  25.             filePath = savePath + mediaId + fileExt;  
  26.   
  27.             BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());  
  28.             FileOutputStream fos = new FileOutputStream(new File(filePath));  
  29.             byte[] buf = new byte[8096];  
  30.             int size = 0;  
  31.             while ((size = bis.read(buf)) != -1)  
  32.                 fos.write(buf, 0, size);  
  33.             fos.close();  
  34.             bis.close();  
  35.   
  36.             conn.disconnect();  
  37.             String info = String.format("下载媒体文件成功,filePath=" + filePath);  
  38.             System.out.println(info);  
  39.         } catch (Exception e) {  
  40.             filePath = null;  
  41.             String error = String.format("下载媒体文件失败:%s", e);  
  42.             System.out.println(error);  
  43.         }  
  44.         return filePath;  
  45.     }  


main 示例:

 

 

[java] view plaincopy
 
  1. //示例  
  2. public static void main(String[] args) {  
  3.     /** 
  4.      * 上传多媒体文件 
  5.      */  
  6.     String access_token = WeixinUtil.getAccessToken(ParamesAPI.corpId, ParamesAPI.secret).getToken();  
  7.     //地址  
  8.     WeixinMedia weixinMedia = uploadMedia(access_token, "image""http://localhost:8080/weixinClient/images/weather3.jpg");  
  9.     //media_id  
  10.     System.out.println("media_id:"+weixinMedia.getMediaId());  
  11.     //类型  
  12.     System.out.println("类型:"+weixinMedia.getType());  
  13.     //时间戳  
  14.     System.out.println("时间戳:"+weixinMedia.getCreatedAt());  
  15.     //打印结果  
  16.     if(null!=weixinMedia){  
  17.         System.out.println("上传成功!");  
  18.     }else{  
  19.         System.out.println("上传失败!");  
  20.     }  
  21.       
  22.     System.out.println("分割线*******************************************************************************************");  
  23.     /** 
  24.      * 下载多媒体文件 
  25.      */  
  26.     String savePath = downloadMedia(access_token, weixinMedia.getMediaId(), "E:/download");  
  27.     System.out.println("下载成功之后保存在本地的地址为:"+savePath);  
  28.   
  29. }  


本地测试打印结果图:

 

 

下载成功之后保存到本地的图片地址图片:

分享到:
评论

相关推荐

    微信企业号接口开发源码-Java

    微信企业号接口开发是微信为企业级用户提供的通讯与协作平台,允许企业内部或与外部合作伙伴进行消息交互、数据共享等操作。在这个Java源码中,作者ivhhs提供了一个基本的框架,帮助开发者理解如何与微信企业号API...

    微信企业号接口开发源码(Java)

    微信企业号接口开发源码(Java)

    基于Spring Boot和WxJava实现的微信企业号企业微信放置演示-源码

    基于Spring Boot和WxJava实现的微信企业号企业微信放置演示-源码.zip

    微信企业号推广案例

    【微信企业号】是微信为企事业单位打造的一款企业级通讯与办公工具,旨在解决传统OA系统在移动设备上的局限性,如界面不美观、系统兼容性差和推广困难等问题。微信企业号通过集成多种功能,为企业提供了一个统一的...

    微信入门程序《代码来自牟云飞微信企业号开发完全自学手册》

    在微信企业号开发中,入门程序是学习和掌握微信接口调用的基础。《微信企业号开发完全自学手册》提供了一套完整的教程,帮助开发者逐步理解并实现与微信接口的交互。本节主要介绍主动调用模式,即由服务器端向微信...

    C#最精简的微信企业号发送消息

    接收消息待上传...",这表明目前的代码仅实现了发送消息的功能,而接收微信企业号的回调消息部分尚未完成。接收消息通常涉及到设置服务器的Webhook,当微信服务器接收到用户的行为后,会向开发者设定的URL发送POST...

    C# 微信企业号 源码下载

    【C#微信企业号源码下载】是一个针对微信企业号应用开发的源代码包,主要使用C#编程语言实现。微信企业号是微信为企事业单位提供的一个内部沟通和对外服务的平台,它允许开发者通过API接口来实现各种功能,如消息推...

    微信企业号推广建设方案

    微信企业号具有与微信个人号高度集成的特点,使得员工能够无缝切换,降低了学习成本,同时其丰富的API接口和开放平台也为企业定制化需求提供了可能。 2. 项目背景: 项目背景部分通常涉及企业的需求分析,包括当前...

    微信企业号回调模式实例(Java版)

    本实例将聚焦于Java版本的实现,通过深入理解回调模式,我们可以更好地构建稳定、高效的微信企业号应用。 首先,我们要明白微信企业号回调的基本原理。当微信企业号接收到特定事件(如用户关注、取消关注、消息发送...

    微信企业号接口开发源码

    微信企业号接口开发源码是针对微信企业号平台进行应用程序开发的重要参考资料,它包含了实现微信企业号各项功能的代码示例和实现逻辑。微信企业号是微信为企业用户提供的内部沟通和管理工具,允许企业构建自己的工作...

    微信企业号开发SDK

    微信公众平台企业号PHP-SDK, 官方API类库,微信企业号开发SDK

    微信企业号开发接口

    本项目涉及的是微信企业号的接口开发,通过源码实现对机构、通讯录、菜单等核心资源的管理。下面我们将深入探讨这些知识点。 1. **微信企业号接口**: 微信企业号提供了丰富的API接口,包括但不限于用户管理、部门...

    微信企业号开发java源码,前端jquery mobile

    微信企业号是微信为企业用户提供的一个平台,它允许企业内部或与合作伙伴进行高效沟通和管理。在这个项目中,我们关注的是使用Java进行后端开发,以及jQuery Mobile进行前端UI设计。接下来,我们将深入探讨这两个...

    C# 微信企业号验证源码MVC版+webForm版

    企业号提供了API接口,用于验证和接收微信服务器的消息。 5. **微信企业号验证**: 验证流程主要包括两种方式:GET请求验证和POST请求验证。微信服务器会向配置的URL发送带有特定参数的请求,应用需要验证参数的...

    微信企业号回调接口

    微信企业号回调接口是微信为企业用户提供的一个关键功能,它允许企业通过编程方式与微信企业号进行实时数据交互。在企业应用开发中,回调接口扮演着数据同步、事件响应和消息处理的重要角色。理解并熟练掌握微信...

    微信企业号推送消息

    微信企业号推送消息是微信为企业用户提供的通讯工具,它允许企业与员工、客户以及合作伙伴进行高效沟通。在微信企业号中,可以实现主动推送消息、接收消息并自动回复的功能,从而提升企业的内部管理效率和对外服务...

    微信企业号应用介绍

    最新的微信企业号应用介绍,(企业)微信企业号建设方案 ,压缩后供参考

    微信企业号php验证token接口

    微信企业号是一个面向企业用户的企业级通讯平台,它允许企业构建内部应用,提供工作效率和团队协作。在微信企业号的开发过程中,为了确保通信的安全性,微信提供了基于token的验证机制,防止非法请求。这里我们将...

    微信企业号接口开发框架实例

    微信企业号接口开发框架是一个专为微信企业号应用设计的开发工具,旨在简化开发者在构建企业内部应用时对接微信API的复杂过程。本框架提供了一个完整的结构,允许开发者快速搭建和自定义功能,以满足企业的特定需求...

Global site tag (gtag.js) - Google Analytics