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

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

  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 }

上传成功就会打印该文件地址

时间: 2024-08-06 20:07:04

java微信接口之三—上传多媒体文件的相关文章

java微信接口之四—上传素材

一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN 其中ACCESS_TOKEN是我们动态获取的. 发送的数据: {"articles":[ { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXC

Java 微信公众号上传永久素材的方法

Java 微信公众号上传永久素材的方法 学习了:http://blog.csdn.net/u013791374/article/details/53258275 膜拜一下,源码如下: @RequestMapping(value="create") public String create(@RequestParam MultipartFile file, HttpServletRequest request, HttpServletResponse response, HttpSess

java微信接口之五—消息分组群发

一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN   其中ACCESS_TOKEN是我们动态获取的.   发送的数据:(这里使用图文消息示例) { "filter":{ "group_id":"2" }, "mpnews":{ "me

上传多媒体文件到微信公众平台

/**     * 上传多媒体文件到微信公众平台     *      * @author w_a     *      *         2014-11-27     *      * @param fileType     *            文件类型     * @param access_token     *            //在微信平台获取到的凭证     * @param filename     *            文件名称     * @param fil

NET实现微信公共平台上传下载多媒体文件(转)

举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等,这些功能都是相当有用的.那么我们现在就要分析一下这个过程.微信平台肯定不能帮助我们OCR或者人脸识别等功能,要做这些功能首先到得到图片!用户拍摄的照片首先被上传到了wenxin的服务器,然后就有了一个mediaID,我们用这个mediaID可以下载到我们自己的服务器上然后处理,把结果给微信平台,由微信平台最终反馈给用户(关注者).微信的开发文档已经

【原创】用JAVA实现大文件上传及显示进度信息

用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息. 而.NET 中使用HtmlInputFile/ HttpPostedFile对象处理二进制文件信息. 优点:使用框架内置对象可以很方便的

微信js sdk上传多张图片

微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="11111111111111111111"; $secret="11111111111111111111"; $token = S('access_token'); if (!$token) { $res = file_get_contents("https://api.weixin.qq.c

java+web+大文件上传下载

文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强:     * iframe上传  * ajax上传  * 进度条  * 文件预览  * 拖放上传 1.1 传统形式 文件上传的传统形式,是使用表单元素file,参考 http://www.ruanyifeng.com/blog/2012/08/file_

java开发中截取上传文件的文件名和后缀名

java开发中截取上传文件的文件名和后缀名 /** * Return the extension portion of the file's name . * * @see #getExtension */ public static String getExtension(File f) { return (f != null) ? getExtension(f.getName()) : ""; } public static String getExtension(String f