首页 » Java » 微信JSSDK上传,下载多媒体文件详情接口

微信JSSDK上传,下载多媒体文件详情接口

2015-10-19 11:10:02阅读(1158)

讲完这篇博客,微信企业号的接口就说完了,下载了我源码的童鞋都知道,里面的备注很详细,但凡看过几遍就都会自己开发了,我说的这些接口至此我已经全部开发完了,剩下的就是你们自己写功能了,都是轻而易举的事情了,我可能后期会主要放在Android上了,届时欢迎大家进来一起探讨,一起学习噢,谢谢

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

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

上传媒体文件:

/**
   * 上传媒体文件
   * @param accessToken 接口访问凭证
   * @param type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)
   * @param media form-data中媒体文件标识,有filename、filelength、content-type等信息
   * @param mediaFileUrl 媒体文件的url
   * 上传的媒体文件限制
  * 图片(image):1MB,支持JPG格式
  * 语音(voice):2MB,播放长度不超过60s,支持AMR格式
  * 视频(video):10MB,支持MP4格式
  * 普通文件(file):10MB
   * */
  public static WeixinMedia uploadMedia(String accessToken, String type, String mediaFileUrl) {
    WeixinMedia weixinMedia = null;
    // 拼装请求地址
    String uploadMediaUrl = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE";
    uploadMediaUrl = uploadMediaUrl.replace("ACCESS_TOKEN", accessToken).replace("TYPE", type);

    // 定义数据分隔符
    String boundary = "------------7da2e536604c8";
    try {
      URL uploadUrl = new URL(uploadMediaUrl);
      HttpURLConnection uploadConn = (HttpURLConnection) uploadUrl.openConnection();
      uploadConn.setDoOutput(true);
      uploadConn.setDoInput(true);
      uploadConn.setRequestMethod("POST");
      // 设置请求头Content-Type
      uploadConn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
      // 获取媒体文件上传的输出流(往微信服务器写数据)
      OutputStream outputStream = uploadConn.getOutputStream();

      URL mediaUrl = new URL(mediaFileUrl);
      HttpURLConnection meidaConn = (HttpURLConnection) mediaUrl.openConnection();
      meidaConn.setDoOutput(true);
      meidaConn.setRequestMethod("GET");

      // 从请求头中获取内容类型
      String contentType = meidaConn.getHeaderField("Content-Type");
      // 根据内容类型判断文件扩展名
      String fileExt = WeixinUtil.getFileEndWitsh(contentType);
      // 请求体开始
      outputStream.write(("--" + boundary + "\r\n").getBytes());
      outputStream.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"file1%s\"\r\n", fileExt).getBytes());
      outputStream.write(String.format("Content-Type: %s\r\n\r\n", contentType).getBytes());

      // 获取媒体文件的输入流(读取文件)
      BufferedInputStream bis = new BufferedInputStream(meidaConn.getInputStream());
      byte[] buf = new byte[8096];
      int size = 0;
      while ((size = bis.read(buf)) != -1) {
        // 将媒体文件写到输出流(往微信服务器写数据)
        outputStream.write(buf, 0, size);
      }
      // 请求体结束
      outputStream.write(("\r\n--" + boundary + "--\r\n").getBytes());
      outputStream.close();
      bis.close();
      meidaConn.disconnect();

      // 获取媒体文件上传的输入流(从微信服务器读数据)
      InputStream inputStream = uploadConn.getInputStream();
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
      StringBuffer buffer = new StringBuffer();
      String str = null;
      while ((str = bufferedReader.readLine()) != null) {
        buffer.append(str);
      }
      bufferedReader.close();
      inputStreamReader.close();
      // 释放资源
      inputStream.close();
      inputStream = null;
      uploadConn.disconnect();

      // 使用JSON-lib解析返回结果
      JSONObject jsonObject = JSONObject.fromObject(buffer.toString());
      // 测试打印结果
      System.out.println("打印测试结果"+jsonObject);
      weixinMedia = new WeixinMedia();
      weixinMedia.setType(jsonObject.getString("type"));
      // type等于 缩略图(thumb) 时的返回结果和其它类型不一样
      if ("thumb".equals(type))
        weixinMedia.setMediaId(jsonObject.getString("thumb_media_id"));
      else
        weixinMedia.setMediaId(jsonObject.getString("media_id"));
          weixinMedia.setCreatedAt(jsonObject.getInt("created_at"));
    } catch (Exception e) {
      weixinMedia = null;
      String error = String.format("上传媒体文件失败:%s", e);
      System.out.println(error);
    }
    return weixinMedia;
  }

下载媒体文件:

/**
	   * 获取媒体文件
	   * @param accessToken 接口访问凭证
	   * @param media_id 媒体文件ID
	   * @param savePath 文件在服务器上的存储路径
	   * @param fileExt 文件类型
	   * */
	  public static String downloadMedia(String accessToken, String mediaId, String savePath,String fileExt) {
	    String filePath = null;
	    // 拼接请求地址
	    String requestUrl = "http://api.weixin.qq.com/cgi-bin/media/get?access_token="+accessToken+"&media_id="+mediaId;
	    requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", mediaId);
	    System.out.println(requestUrl);
	    try {
	      URL url = new URL(requestUrl);
	      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	      conn.setDoInput(true);
	      conn.setRequestMethod("GET");

	      if (!savePath.endsWith("/")) {
	        savePath += "/";
	      }
	      // 根据内容类型获取扩展名
	     // String fileExt = WeixinUtil.getFileEndWitsh(conn.getHeaderField("Content-Type"));
	      // 将mediaId作为文件名
	      filePath = savePath + mediaId + fileExt;

	      BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
	      FileOutputStream fos = new FileOutputStream(new File(filePath));
	      byte[] buf = new byte[8096000];
	      int size = 0;
	      while ((size = bis.read(buf)) != -1)
	        fos.write(buf, 0, size);
	      fos.close();
	      bis.close();

	      conn.disconnect();
	      String info = String.format("下载媒体文件成功,filePath=" + filePath);
	      System.out.println(info);
	    } catch (Exception e) {
	      filePath = null;
	      String error = String.format("下载媒体文件失败:%s", e);
	      System.out.println(error);
	    }
	    return filePath;
	  }

可使用main方法进行测试:

 public static void main(String[] args) {
    /**
     * 上传多媒体文件
     */
    String access_token = WeixinUtil.getAccessToken(ParamesAPI.corpId, ParamesAPI.secret).getToken();
    //地址
    WeixinMedia weixinMedia = uploadMedia(access_token, "image", "http://localhost:8080/weixinClient/images/weather3.jpg");
    //media_id
    System.out.println("media_id:"+weixinMedia.getMediaId());
    //类型
    System.out.println("类型:"+weixinMedia.getType());
    //时间戳
    System.out.println("时间戳:"+weixinMedia.getCreatedAt());
    //打印结果
    if(null!=weixinMedia){
      System.out.println("上传成功!");
    }else{
      System.out.println("上传失败!");
    }
 /**
     * 下载多媒体文件
     */
    String savePath = downloadMedia(access_token, weixinMedia.getMediaId(), "E:/download");
    System.out.println("下载成功之后保存在本地的地址为:"+savePath);

  }


最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹