java微信接口之三—上传多媒体文件

简介: 一、微信上传多媒体接口简介   1、请求:该请求是使用post提交from来实现的,我们可以在网页上进行表单提交来实现。地址为:    http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE   其中ACCESS_TOKEN是我们动态获取的,TYPE是 媒体文件类型。

一、微信上传多媒体接口简介

  1、请求:该请求是使用post提交from来实现的,我们可以在网页上进行表单提交来实现。地址为: 

  http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

  其中ACCESS_TOKEN是我们动态获取的,TYPE是 媒体文件类型。有以下几种类型:,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

  post提交的数据就是文件本身,其中该文件对应的name值(微信服务器根据该值获取文件,input 标签的name值)为media(规定值)。

  2、响应:该响应也是以json方式返回的

  正确的时候返回的数据:{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}  

  TYPE为我们传递给服务器的类型,media_id就是文件id,created_at表示创建的时间。

  错误的时候返回的数据:{"errcode":40004,"errmsg":"invalid media type"}

  errcode,为错误代码,errmsg为错误信息

  具体api可查看:http://mp.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6

二、关于java代码的调用

  在前台进行form提交很容易实现,现在要使用java代码进行表达提交,需要使用到commons-httpclient。httpclient之前在apache是作为commons项目的子项目,而以后才升级到apache的顶级项目。这里需要使用到的就是之前在作为commons子项目的版本,使用的版本为commons-httpclient-3.0。下载地址为:http://archive.apache.org/dist/httpcomponents/commons-httpclient/3.0/binary/

需要引入的jar文件如下:

三、代码实现

  1 import java.io.File;
  2 
  3 import org.apache.commons.httpclient.methods.PostMethod;
  4 import org.apache.commons.httpclient.methods.multipart.FilePart;
  5 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
  6 import org.apache.commons.httpclient.methods.multipart.Part;
  7 import org.apache.http.HttpEntity;
  8 import org.apache.http.HttpResponse;
  9 import org.apache.http.HttpStatus;
 10 import org.apache.http.client.HttpClient;
 11 import org.apache.http.client.methods.HttpGet;
 12 import org.apache.http.impl.client.DefaultHttpClient;
 13 import org.apache.http.util.EntityUtils;
 14 
 15 import com.google.gson.JsonObject;
 16 import com.google.gson.JsonParser;
 17 
 18 public class Test
 19 {
 20     public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";// 获取access
 21     public static final String UPLOAD_IMAGE_URL = "http://file.api.weixin.qq.com/cgi-bin/media/upload";// 上传多媒体文件
 22     public static final String APP_ID = "wxa549b28c24cf341e";
 23     public static final String SECRET = "78d8a8cd7a4fa700142d06b96bf44a37";
 24 
 25     /**
 26      * 上传多媒体文件
 27      * 
 28      * @param url
 29      *            访问url
 30      * @param access_token
 31      *            access_token
 32      * @param type
 33      *            文件类型
 34      * @param file
 35      *            文件对象
 36      * @return
 37      */
 38     public static String uploadImage(String url, String access_token,
 39             String type, File file)
 40     {
 41         org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
 42         String uploadurl = String.format("%s?access_token=%s&type=%s", url,
 43                 access_token, type);
 44         PostMethod post = new PostMethod(uploadurl);
 45         post
 46                 .setRequestHeader(
 47                         "User-Agent",
 48                         "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0");
 49         post.setRequestHeader("Host", "file.api.weixin.qq.com");
 50         post.setRequestHeader("Connection", "Keep-Alive");
 51         post.setRequestHeader("Cache-Control", "no-cache");
 52         String result = null;
 53         try
 54         {
 55             if (file != null && file.exists())
 56             {
 57                 FilePart filepart = new FilePart("media", file, "image/jpeg",
 58                         "UTF-8");
 59                 Part[] parts = new Part[] { filepart };
 60                 MultipartRequestEntity entity = new MultipartRequestEntity(
 61                         parts,
 62 
 63                         post.getParams());
 64                 post.setRequestEntity(entity);
 65                 int status = client.executeMethod(post);
 66                 if (status == HttpStatus.SC_OK)
 67                 {
 68                     String responseContent = post.getResponseBodyAsString();
 69                     JsonParser jsonparer = new JsonParser();// 初始化解析json格式的对象
 70                     JsonObject json = jsonparer.parse(responseContent)
 71                             .getAsJsonObject();
 72                     if (json.get("errcode") == null)// {"errcode":40004,"errmsg":"invalid media type"}
 73                     { // 上传成功  {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
 74                         result = json.get("media_id").getAsString();
 75                     }
 76                 }
 77             }
 78         }
 79         catch (Exception e)
 80         {
 81             e.printStackTrace();
 82         }
 83         finally
 84         {
 85             return result;
 86         }
 87     }
 88 
 89     public static void main(String[] args) throws Exception
 90     {
 91         String accessToken = getToken(GET_TOKEN_URL, APP_ID, SECRET);// 获取token在微信接口之一中的方法获取token
 92         if (accessToken != null)// token成功获取
 93         {
 94             System.out.println(accessToken);
 95             File file = new File("f:" + File.separator + "2000.JPG"); // 获取本地文件
 96             String id = uploadImage(UPLOAD_IMAGE_URL, accessToken, "image",
 97                     file);// 上传文件
 98             if (id != null)
 99                 System.out.println(id);
100         }
101     }
102 
103 }

上传成功就会打印该文件id。

目录
相关文章
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
88 9
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
96 2
|
3月前
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
533 2
|
10天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
69 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
1月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
88 34
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
47 3
|
2月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
2月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
169 2
|
2月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
79 4
|
2月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
101 4