最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java微信開發(fā)之上傳下載多媒體文件

 更新時間:2016年06月24日 09:50:57   作者:qincidong  
這篇文章主要為大家詳細(xì)介紹了java微信開發(fā)之簡單實現(xiàn)上傳下載多媒體文件的相關(guān)資料,感興趣的小伙伴們可以參考一下

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

將多媒體文件上傳到微信服務(wù)器,以及從微信服務(wù)器下載文件,可以參考:http://mp.weixin.qq.com/wiki/index.php?title=上傳下載多媒體文件

上傳下載多媒體文件的方法還是寫到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";
 // 創(chuàng)建菜單
 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>();
 /**
 * 發(fā)起https請求并獲取結(jié)果
 * 
 * @param requestUrl 請求地址
 * @param requestMethod 請求方式(GET、POST)
 * @param outputStr 提交的數(shù)據(jù)
 * @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("緩存中發(fā)現(xiàn)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;
 }
 
 /**
 * 創(chuàng)建菜單
 *
 * @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("菜單創(chuàng)建失??!errorCode:%d,errorMsg:%s",jsonObject.getInt("errcode"),jsonObject.getString("errmsg")));
 return false;
 }
 
 log.info("菜單創(chuàng)建成功!");
 
 return true;
 }
 
 // 上傳多媒體文件到微信服務(wù)器
 public static final String upload_media_url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE";
 /**
 * 上傳多媒體文件到微信服務(wù)器<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");
 
  // 設(shè)置邊界
  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();
 
  // 結(jié)尾部分
  byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定義最后數(shù)據(jù)分隔線
 
  out.write(foot);
 
  out.flush();
  out.close();
 
  /**
   * 讀取服務(wù)器響應(yīng),必須讀取,否則提交不成功
   */
   try {
   // 定義BufferedReader輸入流來讀取URL的響應(yīng)
   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("發(fā)送POST請求出現(xiàn)異常!" + 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";
 /**
 * 從微信服務(wù)器下載多媒體文件
 *
 * @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;
 }
}

更多精彩內(nèi)容請點擊《Android微信開發(fā)教程匯總》,《java微信開發(fā)教程匯總》歡迎大家學(xué)習(xí)閱讀。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • php版微信公眾平臺接口參數(shù)調(diào)試實現(xiàn)判斷用戶行為的方法

    php版微信公眾平臺接口參數(shù)調(diào)試實現(xiàn)判斷用戶行為的方法

    這篇文章主要介紹了php版微信公眾平臺接口參數(shù)調(diào)試實現(xiàn)判斷用戶行為的方法,可判斷出用戶訂閱、取消訂閱、發(fā)送信息等行為,涉及微信公眾平臺接口參數(shù)調(diào)試的相關(guān)操作技巧,需要的朋友可以參考下
    2016-09-09
  • PHP實現(xiàn)rar解壓讀取擴(kuò)展包小結(jié)

    PHP實現(xiàn)rar解壓讀取擴(kuò)展包小結(jié)

    今天重點給大家介紹PHP 擴(kuò)展就是針對于 rar 的壓縮包操作,不過,PHP 的 rar 擴(kuò)展僅能讀取和解壓 rar 格式的壓縮包,并不能進(jìn)行壓縮操作,關(guān)于 rar 的壓縮操作并沒有找到太多有用的資料,下面通過本文一起學(xué)習(xí)下PHP rar解壓讀取知識吧
    2021-06-06
  • PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動檢測和處理 GIF

    PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動檢測和處理 GIF

    這篇文章主要介紹了PHP 使用 Imagick 裁切/生成縮略圖/添加水印自動檢測和處理 GIF的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • php parse_str() 函數(shù)的定義和用法

    php parse_str() 函數(shù)的定義和用法

    下面小編就為大家?guī)硪黄猵hp parse_str() 函數(shù)的定義和用法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • PHP環(huán)境中Memcache的安裝和使用

    PHP環(huán)境中Memcache的安裝和使用

    本文給大家介紹php環(huán)境中memcache的安裝和使用,它可以應(yīng)用任意多個連接,使用非阻塞的網(wǎng)絡(luò)IO。由于它的工作機(jī)制是在內(nèi)存中開辟一塊空間,然后建立一個HashTable,Memcached自管理這些HashTable,感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • php中實現(xiàn)記住密碼下次自動登錄的例子

    php中實現(xiàn)記住密碼下次自動登錄的例子

    這篇文章主要介紹了php中實現(xiàn)記住密碼下次自動登錄的例子,本文使用cookie實現(xiàn)記住密碼和自動登錄功能,需要的朋友可以參考下
    2014-11-11
  • Windows下配置Nginx和PHP的步驟及測試

    Windows下配置Nginx和PHP的步驟及測試

    這篇文章主要給大家介紹了關(guān)于Windows下配置Nginx和PHP的步驟及測試,文中包括了在Windows環(huán)境下配置Nginx和PHP的步驟,包括下載、解壓、配置和測試,通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • YII實現(xiàn)分頁的方法

    YII實現(xiàn)分頁的方法

    這篇文章主要介紹了YII實現(xiàn)分頁的方法,需要的朋友可以參考下
    2014-07-07
  • PHP 獲取指定地區(qū)的天氣實例代碼

    PHP 獲取指定地區(qū)的天氣實例代碼

    這篇文章主要介紹了PHP 獲取指定地區(qū)的天氣實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • PHP時間戳與日期之間轉(zhuǎn)換的實例介紹

    PHP時間戳與日期之間轉(zhuǎn)換的實例介紹

    本篇文章小編為大家介紹,PHP時間戳與日期之間轉(zhuǎn)換的實例介紹。需要的朋友參考下
    2013-04-04

最新評論

怀化市| 漠河县| 丹寨县| 泰来县| 鄢陵县| 抚远县| 吉林市| 阿克苏市| 雷州市| 青田县| 兴仁县| 嫩江县| 元谋县| 莱州市| 抚宁县| 滨海县| 平凉市| 三明市| 白银市| 东方市| 忻州市| 六安市| 玉山县| 彭阳县| 阿拉善右旗| 延吉市| 雅安市| 晋宁县| 南木林县| 乌拉特后旗| 青铜峡市| 宁波市| 东丽区| 寿阳县| 水城县| 高碑店市| 大新县| 慈溪市| 昆明市| 茌平县| 巴楚县|