中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

java微信開發之上傳下載多媒體文件
來源:易賢網 閱讀:3547 次 日期:2016-08-16 15:35:56
溫馨提示:易賢網小編為您整理了“java微信開發之上傳下載多媒體文件”,方便廣大網友查閱!

這篇文章主要為大家詳細介紹了java微信開發之簡單實現上傳下載多媒體文件的相關資料,感興趣的小伙伴們可以參考一下

回復圖片、音頻、視頻消息都是需要media_id的,這個是需要將多媒體文件上傳到微信服務器才有的。

上傳下載多媒體文件的方法還是寫到WeixinUtil.java中。

代碼如下:

import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.security.KeyManagementException;

import java.security.NoSuchAlgorithmException;

import java.security.NoSuchProviderException;

import java.security.SecureRandom;

import java.util.Calendar;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;

import org.apache.log4j.Logger;

import com.company.project.model.menu.AccessToken;

import com.company.project.model.menu.Menu;

public class WeixinUtil {

 private static Logger log = Logger.getLogger(WeixinUtil.class);

 public final static String APPID = "wxb927d4280e6db674";

 public final static String APP_SECRET = "21441e9f3226eee81e14380a768b6d1e";

 // 獲取access_token的接口地址(GET) 限200(次/天)

 public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

 // 創建菜單

 public final static String create_menu_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";

 // 存放:1.token,2:獲取token的時間,3.過期時間

 public final static Map<String,Object> accessTokenMap = new HashMap<String,Object>();

 /**

 * 發起https請求并獲取結果

 * 

 * @param requestUrl 請求地址

 * @param requestMethod 請求方式(GET、POST)

 * @param outputStr 提交的數據

 * @return JSONObject(通過JSONObject.get(key)的方式獲取json對象的屬性值)

 */

 public static JSONObject handleRequest(String requestUrl,String requestMethod,String outputStr) {

 JSONObject jsonObject = null;

 try {

  URL url = new URL(requestUrl);

  HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

  SSLContext ctx = SSLContext.getInstance("SSL", "SunJSSE");

  TrustManager[] tm = {new MyX509TrustManager()};

  ctx.init(null, tm, new SecureRandom());

  SSLSocketFactory sf = ctx.getSocketFactory();

  conn.setSSLSocketFactory(sf);

  conn.setDoInput(true);

  conn.setDoOutput(true);

  conn.setRequestMethod(requestMethod);

  conn.setUseCaches(false);

  if ("GET".equalsIgnoreCase(requestMethod)) {

  conn.connect();

  }

  if (StringUtils.isNotEmpty(outputStr)) {

  OutputStream out = conn.getOutputStream();

  out.write(outputStr.getBytes("utf-8"));

  out.close();

  }

  InputStream in = conn.getInputStream();

  BufferedReader br = new BufferedReader(new InputStreamReader(in,"utf-8"));

  StringBuffer buffer = new StringBuffer();

  String line = null;

  while ((line = br.readLine()) != null) {

  buffer.append(line);

  }

  in.close();

  conn.disconnect();

  jsonObject = JSONObject.fromObject(buffer.toString());

 } catch (MalformedURLException e) {

  e.printStackTrace();

  log.error("URL錯誤!");

 } catch (IOException e) {

  e.printStackTrace();

 } catch (NoSuchAlgorithmException e) {

  e.printStackTrace();

 } catch (NoSuchProviderException e) {

  e.printStackTrace();

 } catch (KeyManagementException e) {

  e.printStackTrace();

 }

 return jsonObject;

 }

 /**

 * 獲取access_token

 *

 * @author qincd

 * @date Nov 6, 2014 9:56:43 AM

 */

 public static AccessToken getAccessToken(String appid,String appSecret) {

 AccessToken at = new AccessToken();

 // 每次獲取access_token時,先從accessTokenMap獲取,如果過期了就重新從微信獲取

 // 沒有過期直接返回

 // 從微信獲取的token的有效期為2個小時

 if (!accessTokenMap.isEmpty()) {

  Date getTokenTime = (Date) accessTokenMap.get("getTokenTime");

  Calendar c = Calendar.getInstance();

  c.setTime(getTokenTime);

  c.add(Calendar.HOUR_OF_DAY, 2);

  getTokenTime = c.getTime();

  if (getTokenTime.after(new Date())) {

  log.info("緩存中發現token未過期,直接從緩存中獲取access_token");

  // token未過期,直接從緩存獲取返回

  String token = (String) accessTokenMap.get("token");

  Integer expire = (Integer) accessTokenMap.get("expire");

  at.setToken(token);

  at.setExpiresIn(expire);

  return at;

  }

 }

 String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appSecret);

 JSONObject object = handleRequest(requestUrl, "GET", null);

 String access_token = object.getString("access_token");

 int expires_in = object.getInt("expires_in");

 log.info("\naccess_token:" + access_token);

 log.info("\nexpires_in:" + expires_in);

 at.setToken(access_token);

 at.setExpiresIn(expires_in);

 // 每次獲取access_token后,存入accessTokenMap

 // 下次獲取時,如果沒有過期直接從accessTokenMap取。

 accessTokenMap.put("getTokenTime", new Date());

 accessTokenMap.put("token", access_token);

 accessTokenMap.put("expire", expires_in);

 return at;

 }

 /**

 * 創建菜單

 *

 * @author qincd

 * @date Nov 6, 2014 9:56:36 AM

 */

 public static boolean createMenu(Menu menu,String accessToken) {

 String requestUrl = create_menu_url.replace("ACCESS_TOKEN", accessToken);

 String menuJsonString = JSONObject.fromObject(menu).toString();

 JSONObject jsonObject = handleRequest(requestUrl, "POST", menuJsonString);

 String errorCode = jsonObject.getString("errcode");

 if (!"0".equals(errorCode)) {

  log.error(String.format("菜單創建失??!errorCode:%d,errorMsg:%s",jsonObject.getInt("errcode"),jsonObject.getString("errmsg")));

  return false;

 }

 log.info("菜單創建成功!");

 return true;

 }

 // 上傳多媒體文件到微信服務器

 public static final String upload_media_url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE";

 /**

 * 上傳多媒體文件到微信服務器<br>

 * @see http://www.oschina.net/code/snippet_1029535_23824

 * @see http://mp.weixin.qq.com/wiki/index.php?title=上傳下載多媒體文件

 *

 * @author qincd

 * @date Nov 6, 2014 4:11:22 PM

 */

 public static JSONObject uploadMediaToWX(String filePath,String type,String accessToken) throws IOException{

 File file = new File(filePath);

 if (!file.exists()) {

  log.error("文件不存在!");

  return null;

 }

 String url = upload_media_url.replace("ACCESS_TOKEN", accessToken).replace("TYPE", type);

 URL urlObj = new URL(url);

 HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();

 conn.setDoInput(true);

 conn.setDoOutput(true);

 conn.setUseCaches(false);

 conn.setRequestProperty("Connection", "Keep-Alive");

    conn.setRequestProperty("Charset", "UTF-8");

    // 設置邊界

    String BOUNDARY = "----------" + System.currentTimeMillis();

    conn.setRequestProperty("Content-Type", "multipart/form-data; boundary="

        + BOUNDARY);

    // 請求正文信息

    // 第一部分:

    StringBuilder sb = new StringBuilder();

    sb.append("--"); // ////////必須多兩道線

    sb.append(BOUNDARY);

    sb.append("\r\n");

    sb.append("Content-Disposition: form-data;name=\"file\";filename=\""

        + file.getName() + "\"\r\n");

    sb.append("Content-Type:application/octet-stream\r\n\r\n");

    byte[] head = sb.toString().getBytes("utf-8");

    // 獲得輸出流

    OutputStream out = new DataOutputStream(conn.getOutputStream());

    out.write(head);

    // 文件正文部分

    DataInputStream in = new DataInputStream(new FileInputStream(file));

    int bytes = 0;

    byte[] bufferOut = new byte[1024];

    while ((bytes = in.read(bufferOut)) != -1) {

      out.write(bufferOut, 0, bytes);

    }

    in.close();

    // 結尾部分

    byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定義最后數據分隔線

    out.write(foot);

    out.flush();

    out.close();

    /**

     * 讀取服務器響應,必須讀取,否則提交不成功

     */

     try {

     // 定義BufferedReader輸入流來讀取URL的響應

     StringBuffer buffer = new StringBuffer();

     BufferedReader reader = new BufferedReader(new InputStreamReader(

     conn.getInputStream()));

     String line = null;

     while ((line = reader.readLine()) != null) {

      buffer.append(line);

     }

      

     reader.close();

     conn.disconnect();

      

     return JSONObject.fromObject(buffer.toString());

     } catch (Exception e) {

     log.error("發送POST請求出現異常!" + e);

     e.printStackTrace();

     }

 return null;

 }

 public static final String download_media_url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";

 /**

 * 從微信服務器下載多媒體文件

 *

 * @author qincd

 * @date Nov 6, 2014 4:32:12 PM

 */

 public static String downloadMediaFromWx(String accessToken,String mediaId,String fileSavePath) throws IOException {

 if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(mediaId)) return null;

 String requestUrl = download_media_url.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", mediaId);

 URL url = new URL(requestUrl);

 HttpURLConnection conn = (HttpURLConnection) url.openConnection();

 conn.setRequestMethod("GET");

 conn.setDoInput(true);

 conn.setDoOutput(true);

 InputStream in = conn.getInputStream();

 File dir = new File(fileSavePath);

 if (!dir.exists()) {

  dir.mkdirs();

 }

 if (!fileSavePath.endsWith("/")) {

  fileSavePath += "/";

 }

 String ContentDisposition = conn.getHeaderField("Content-disposition");

 String weixinServerFileName = ContentDisposition.substring(ContentDisposition.indexOf("filename")+10, ContentDisposition.length() -1);

 fileSavePath += weixinServerFileName; 

 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileSavePath));

 byte[] data = new byte[1024];

 int len = -1;

 while ((len = in.read(data)) != -1) {

  bos.write(data,0,len);

 }

 bos.close();

 in.close();

 conn.disconnect();

 return fileSavePath;

 }

}

測試代碼:

public class WeixinUtilTest {

 /**

 *

 * @author qincd

 * @date Nov 6, 2014 9:57:54 AM

 */

 public static void main(String[] args) {

 // 1).獲取access_token

 AccessToken accessToken = WeixinUtil.getAccessToken(WeixinUtil.APPID, WeixinUtil.APP_SECRET);

 String filePath = "C:\\Users\\qince\\Pictures\\壁紙20141029091612.jpg";

 JSONObject uploadJsonObj = testUploadMedia(filePath,"image",accessToken.getToken());

 if (uploadJsonObj == null) {

  System.out.println("上傳圖片失敗");

  return;

 }

 int errcode = 0;

 if (uploadJsonObj.containsKey("errcode")) {

  errcode = uploadJsonObj.getInt("errcode");

 }

 if (errcode == 0) {

  System.out.println("圖片上傳成功");

  String mediaId = uploadJsonObj.getString("media_id");

  long createAt = uploadJsonObj.getLong("created_at");

  System.out.println("--Details:");

  System.out.println("media_id:" + mediaId);

  System.out.println("created_at:" + createAt);

 }

 else {

  System.out.println("圖片上傳失?。?);

  String errmsg = uploadJsonObj.getString("errmsg");

  System.out.println("--Details:");

  System.out.println("errcode:" + errcode);

  System.out.println("errmsg:" + errmsg);

 }

 String mediaId = "6W-UvSrQ2hkdSdVQJJXShwtFDPLfbGI1qnbNFy8weZyb9Jac2xxxcAUwt8p4sYPH";

 String filepath = testDownloadMedia(accessToken.getToken(), mediaId, "d:/test");

 System.out.println(filepath);

 }

 /**

 * 上傳多媒體文件到微信

 *

 * @author qincd

 * @date Nov 6, 2014 4:15:14 PM

 */

 public static JSONObject testUploadMedia(String filePath,String type,String accessToken) {

 try {

  return WeixinUtil.uploadMediaToWX(filePath, type, accessToken);

 } catch (IOException e) {

  e.printStackTrace();

 }

 return null;

 }

 /**

 * 從微信下載多媒體文件

 *

 * @author qincd

 * @date Nov 6, 2014 4:56:25 PM

 */

 public static String testDownloadMedia(String accessToken,String mediaId,String fileSaveDir) {

 try {

  return WeixinUtil.downloadMediaFromWx(accessToken, mediaId, fileSaveDir);

 } catch (IOException e) {

  e.printStackTrace();

 }

 return null;

 }

}

以上就是本文的全部內容,希望對大家的學習有所幫助

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
午夜在线成人av| 亚洲欧美日韩精品久久久久| 国产丝袜一区二区| 国产亚洲欧美一区二区三区| 永久555www成人免费| 一本综合精品| 欧美三日本三级三级在线播放| 国产亚洲欧美日韩在线一区| 亚洲精品在线一区二区| 欧美日韩精品一区二区三区| 国产一区二区三区无遮挡| 99精品免费视频| 亚洲高清自拍| 欧美日韩一本到| 亚洲福利小视频| 欧美在线观看视频一区二区三区| 国内精品久久久久久久果冻传媒| 好看不卡的中文字幕| 一区二区视频免费在线观看| 亚洲视频专区在线| 国产精品视频大全| 亚洲免费婷婷| 国产精品夫妻自拍| 好吊日精品视频| 久久久久综合一区二区三区| 国产中文一区二区| 久久国产综合精品| 樱花yy私人影院亚洲| 久久精品视频网| 欧美一区二区三区四区在线观看地址 | 欧美激情精品久久久久久蜜臀| 国产精品国产三级国产普通话蜜臀| 亚洲一区自拍| 国产精品免费一区二区三区在线观看| 一区二区三区毛片| 激情综合色丁香一区二区| 欧美影院成年免费版| 国内激情久久| 免费av成人在线| 亚洲精品免费电影| 欧美视频第二页| 久久这里有精品视频| 亚洲国产精品www| 欧美激情精品久久久久久变态| 欧美一区二区视频在线| 黄色资源网久久资源365| 久久婷婷激情| 韩日成人av| 国产伦精品一区二区三区在线观看| 亚洲欧美日韩精品在线| 影音先锋在线一区| 国产视频在线观看一区二区| 久久久精品五月天| 亚洲经典在线| 欧美二区视频| 久久综合给合久久狠狠狠97色69| 亚洲国产91精品在线观看| 欧美久久电影| 男女激情久久| 亚洲综合三区| 136国产福利精品导航网址应用| 国产日韩欧美精品一区| 欧美大片在线观看一区二区| 亚洲视频电影在线| 在线天堂一区av电影| 韩曰欧美视频免费观看| 欧美韩国在线| 亚洲欧洲在线视频| 国产日韩欧美另类| 欧美激情综合色综合啪啪| 亚洲欧洲日产国产网站| 亚洲清纯自拍| 国产亚洲成人一区| 国产精品igao视频网网址不卡日韩| 欧美亚洲专区| 99精品视频免费在线观看| 亚洲国产三级在线| 日韩视频一区二区在线观看| 国产曰批免费观看久久久| 欧美三级在线视频| 欧美极品aⅴ影院| 久久久久国产精品厨房| 亚洲专区一区| 亚洲午夜精品久久久久久app| 久久九九免费| 蜜臀a∨国产成人精品| 久久精品视频在线看| 一区二区三区四区五区精品视频 | 韩国福利一区| 欧美四级电影网站| 免费欧美在线视频| 欧美日本在线观看| 免费一级欧美片在线观看| 久久久久久欧美| 欧美久久一区| 欧美不卡视频| 蜜桃av一区二区三区| 999亚洲国产精| 一本久久a久久免费精品不卡| 在线成人激情黄色| 亚洲精品男同| 国产亚洲一级| 激情久久久久久久| 亚洲天堂免费观看| 蜜臀久久久99精品久久久久久 | 亚洲精品一区二区三| 亚洲欧美综合v| 欧美大片在线观看一区二区| 国产精品美女主播在线观看纯欲| 亚洲电影免费观看高清完整版| 中文精品视频一区二区在线观看| 久久久久国色av免费观看性色| 亚洲婷婷在线| 欧美黄色一级视频| 韩国av一区二区| 亚洲主播在线| 欧美日韩成人激情| 亚洲高清自拍| 久久综合久久综合久久综合| 国产精品日韩欧美一区二区三区 | 欧美天堂在线观看| 尤妮丝一区二区裸体视频| 午夜精品久久久久久久99水蜜桃 | 免费观看成人www动漫视频| 国产精品亚洲综合色区韩国| 一本色道久久99精品综合| 欧美高清视频一二三区| 亚洲高清激情| 久久综合影视| 亚洲第一精品久久忘忧草社区| 久久久久久综合| 国产一区二区三区免费观看| 性欧美激情精品| 国产偷国产偷亚洲高清97cao| 午夜精品久久99蜜桃的功能介绍| 国产精品户外野外| 亚洲欧美日韩国产综合精品二区| 国产精品ⅴa在线观看h| 一区二区欧美精品| 国产精品久久国产愉拍| 午夜精品视频在线观看| 国产日本欧美在线观看| 欧美伊人久久久久久午夜久久久久| 国产精品爽爽ⅴa在线观看| 午夜一级久久| 国产一区二区三区的电影 | 你懂的国产精品永久在线| 亚洲高清免费在线| 欧美高清在线一区二区| 一本色道久久99精品综合 | 欧美日韩麻豆| 亚洲一区二区在线看| 国产日韩亚洲欧美综合| 久久躁日日躁aaaaxxxx| 亚洲人成77777在线观看网| 欧美日韩1234| 午夜免费在线观看精品视频| 激情成人亚洲| 欧美精品一区二区三| 亚洲欧美激情视频| 在线观看欧美日本| 欧美视频中文在线看 | 欧美福利精品| 在线中文字幕日韩| 国产欧美亚洲日本| 免费在线看一区| 亚洲综合成人婷婷小说| 极品少妇一区二区三区| 欧美日韩在线不卡| 久久久国产精彩视频美女艺术照福利 | 国产乱码精品| 免费成人av| 亚洲视频 欧洲视频| 国产在线精品二区| 欧美日韩国产黄| 久久国产精品久久国产精品| 亚洲日本欧美| 国产一区久久久| 欧美日韩在线精品| 美玉足脚交一区二区三区图片| 中文在线资源观看网站视频免费不卡 | 久久综合成人精品亚洲另类欧美| 夜夜嗨av色综合久久久综合网| 国产亚洲成av人片在线观看桃| 欧美日韩不卡视频| 久久中文欧美| 性欧美大战久久久久久久久| 日韩视频第一页| 影音先锋亚洲精品| 国产色视频一区| 欧美午夜精品久久久久免费视| 可以免费看不卡的av网站| 亚洲欧美国产另类| 亚洲精品久久久久久久久久久久| 国内精品久久国产| 国产人久久人人人人爽| 国产精品久久久一区二区三区| 欧美精品v日韩精品v韩国精品v| 久久久久在线观看| 久久久噜噜噜久噜久久|