茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

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

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

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

    上傳下載多媒體文件的方法還是寫到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的時(shí)間,3.過期時(shí)間

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

     /**

     * 發(fā)起https請(qǐng)求并獲取結(jié)果

     * 

     * @param requestUrl 請(qǐng)求地址

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

     * @param outputStr 提交的數(shù)據(jù)

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

     */

     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錯(cuò)誤!");

     } 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時(shí),先從accessTokenMap獲取,如果過期了就重新從微信獲取

     // 沒有過期直接返回

     // 從微信獲取的token的有效期為2個(gè)小時(shí)

     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

     // 下次獲取時(shí),如果沒有過期直接從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)建失?。rrorCode:%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);

        // 請(qǐng)求正文信息

        // 第一部分:

        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請(qǐng)求出現(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;

     }

    }

    測(cè)試代碼:

    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)容,希望對(duì)大家的學(xué)習(xí)有所幫助

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:java微信開發(fā)之上傳下載多媒體文件
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)