亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java微信公眾平臺之素材管理

2024-07-14 08:40:41
字體:
來源:轉載
供稿:網友

微信素材管理和群發這塊文檔對Java很不友好。本文只對新增臨時素材,新增永久素材做介紹,其余獲取、刪除、修改自行補充

公眾號經常有需要用到一些臨時性的多媒體素材的場景,例如在使用接口特別是發送消息時,對多媒體文件、多媒體消息的獲取和調用等操作,是通過media_id來進行的。素材管理接口對所有認證的訂閱號和服務號開放。

素材的限制

圖片(image): 2M,支持PNG/JPEG/JPG/GIF格式
語音(voice):2M,播放長度不超過60s,支持AMR/MP3格式
視頻(video):10MB,支持MP4格式
縮略圖(thumb):64KB,支持JPG格式

一、新增臨時素材

接口:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE,再傳一個媒體文件類型,可以是圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)。

1、訂閱號和服務號要通過認證
2、臨時素材media_id是可復用的

3、媒體文件在微信后臺保存時間為3天,即3天后media_id失效。

/**  * 上傳臨時素材(本地)  *  * @param accessToken  * @param type  *   媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)  * @param path  *   圖片路徑  * @return  */  public static UploadMediasResult uploadTempMediaFile(String accessToken, String type, String path) {  UploadMediasResult result = null;  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  params.put("type", type);  try {   String json = HttpsUploadMediaFile(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_TEMP_MEDIA_TYPE_URL,     params, path);   result = JsonUtil.fromJsonString(json, UploadMediasResult.class);  } catch (Exception e) {   e.printStackTrace();  }  return result; }  /**  * 上傳臨時素材(網絡)  *  * @param accessToken  * @param type  *   媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)  * @param path  *   圖片路徑  * @return  */ public static UploadMediasResult uploadTempMedia(String accessToken, String type, String path) {  UploadMediasResult result = null;  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  params.put("type", type);  try {   String json = HttpsUploadMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_TEMP_MEDIA_TYPE_URL, params,     path, 0, 0);   result = JsonUtil.fromJsonString(json, UploadMediasResult.class);  } catch (Exception e) {   e.printStackTrace();  }  return result; } 

二、新增永久素材

接口:https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE,媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video,例外)和縮略圖(thumb)

/**  * 上傳永久素材(本地)  *  * @param accessToken  * @param type  *   媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)  * @return  */ public static UploadMediasResult uploadForeverMediaFile(String accessToken, String type, String path) {  UploadMediasResult result = null;  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  params.put("type", type);  try {   String json = HttpsUploadMediaFile(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL,     params, path);   result = JsonUtil.fromJsonString(json, UploadMediasResult.class);  } catch (Exception e) {   e.printStackTrace();  }  return result; }  /**  * 上傳永久素材(網絡)  *  * @param accessToken  * @param type  *   媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb)  * @return  */ public static UploadMediasResult uploadForeverMedia(String accessToken, String type, String path) {  UploadMediasResult result = null;  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  params.put("type", type);  try {   String json = HttpsUploadMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL, params,     path, 0, 0);   result = JsonUtil.fromJsonString(json, UploadMediasResult.class);  } catch (Exception e) {   e.printStackTrace();  }  return result; } 

 新增永久視頻素材需特別注意,在上傳視頻素材時需要POST另一個表單,id為description,包含素材的描述信息title和introduction,內容格式為JSON

/**  * 上傳永久素材(video)  *  * @param accessToken  * @return  */ public static String uploadForeverMediaFile(String accessToken, String title, String introduction, String path) {  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  params.put("type", "video");  String mediaId = null;  try {   String json = HttpsUploadVideoMediaFile(SystemConfig.POST_METHOD,     WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL, params, path, title, introduction);   mediaId = JsonUtil.fromJsonString(json, "media_id");  } catch (Exception e) {   e.printStackTrace();  }  return mediaId; }  /**  * 上傳永久素材(video,網絡)  *  * @param accessToken  * @return  */ public static String uploadForeverMedia(String accessToken, String title, String introduction, String path) {  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  params.put("type", "video");  String mediaId = null;  try {   String json = HttpsUploadVideoMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL,     params, path, title, introduction, 0, 0);   mediaId = JsonUtil.fromJsonString(json, "media_id");  } catch (Exception e) {   e.printStackTrace();  }  return mediaId; } 

三、新增永久圖文素材

接口:https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN,post信息參見UploadNewsMedia 實體類

 對于常用的素材,開發者可通過本接口上傳到微信服務器,永久使用.

1、永久圖片素材新增后,將帶有URL返回給開發者,開發者可以在騰訊系域名內使用(騰訊系域名外使用,圖片將被屏蔽)。
2、公眾號的素材庫保存總數量有上限:圖文消息素材、圖片素材上限為5000,其他類型為1000。
3、圖文消息的具體內容中,微信后臺將過濾外部的圖片鏈接,圖片url需通過"上傳圖文消息內的圖片獲取URL"接口上傳圖片獲取。
4、"上傳圖文消息內的圖片獲取URL"接口所上傳的圖片,不占用公眾號的素材庫中圖片數量的5000個的限制,圖片僅支持jpg/png格式,大小必須在1MB以下。
5、圖文消息支持正文中插入自己帳號和其他公眾號已群發文章鏈接的能力。

/**  * 上傳永久圖文消息的素材  *  * @param accessToken  *   授權token  * @param entity  *   圖文消息對象  * @return  */ public static UploadMediasResult uploadNewsMedia(String accessToken, List<UploadNewsMedia> entity) {  UploadMediasResult result = null;  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  // post 提交的參數  TreeMap<String, List<UploadNewsMedia>> dataParams = new TreeMap<String, List<UploadNewsMedia>>();  dataParams.put("articles", entity);  String data = JsonUtil.toJsonString(dataParams);  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD,    WechatConfig.UPLOAD_FOREVER_NEWS_MEDIA_URL, params, data);  result = JsonUtil.fromJsonString(json, UploadMediasResult.class);  return result; } 

四、上傳圖文消息內的圖片獲取URL

接口:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

本接口所上傳的圖片不占用公眾號的素材庫中圖片數量的5000個的限制。圖片僅支持jpg/png格式,大小必須在1MB以下,此接口返回的url就是上傳圖片的URL,可放置圖文消息中使用。

/**  * 上傳圖文消息內的圖片獲取URL(本地)  *  * @param accessToken  * @param path  * @return  */ public static String uploadImgMediaFile(String accessToken, String path) {  TreeMap<String, String> params = new TreeMap<>();  params.put("access_token", accessToken);  String url = null;  try {   String json = HttpsUploadMediaFile(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_IMG_MEDIA_URL, params,     path);   url = JsonUtil.fromJsonString(json, "url");  } catch (Exception e) {   e.printStackTrace();  }  return url; }  /**  * 上傳圖文消息內的圖片獲取URL(網絡)  *  * @param accessToken  * @param path  * @return  */ public static String uploadImgMedia(String accessToken, String path) {  TreeMap<String, String> params = new TreeMap<String, String>();  params.put("access_token", accessToken);  String url = null;  try {   String json = HttpsUploadMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_IMG_MEDIA_URL, params, path, 0,     0);   url = JsonUtil.fromJsonString(json, "url");  } catch (Exception e) {   e.printStackTrace();  }  return url; } 

五、部分工具類

配置類

public static final String UPLOAD_IMG_MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadimg"; public static final String UPLOAD_FOREVER_NEWS_MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/material/add_news"; public static final String UPLOAD_TEMP_MEDIA_TYPE_URL = "https://api.weixin.qq.com/cgi-bin/media/upload"; public static final String UPLOAD_FOREVER_MEDIA_TYPE_URL = "https://api.weixin.qq.com/cgi-bin/material/add_material"; 

上傳圖文消息素材返回類

package com.phil.wechat.msg.model.media;  /**  * 上傳圖文消息素材返回的結果  * @author phil  * @date 2017年9月20日  *  */ public class UploadMediasResult {  private String type; // 媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb),次數為news,即圖文消息  private String media_id; // 媒體文件/圖文消息上傳后獲取的唯一標識  private String created_at; // 媒體文件上傳時間 } 

上傳圖文消息素材實體類

package com.phil.wechat.msg.model.media;  import java.io.Serializable;  /**  * 上傳圖文消息素材實體類  * @author phil  * @date 2017年9月20日  */ public class UploadNewsMedia implements Serializable {   private static final long serialVersionUID = 6551817058101753854L;  private String thumb_media_id; // 圖文消息縮略圖的media_id,可以在基礎支持-上傳多媒體文件接口中獲得  private String author; // 圖文消息的作者  private String title; // 圖文消息的標題  private String content_source_url; // 圖文消息點擊閱讀原文的鏈接  private String content; // 圖文消息頁面的內容,支持HTML標簽  private String digest; // 圖文消息的描述  private int show_conver_pic; // 是否顯示為封面 1表示顯示為封面 0 不顯示為封面 } 

上傳方法

/**  * 上傳媒體文件(本地)  *  * @param method  *   請求方法 GET/POST  * @param path  *   api的路徑  * @param param  *   api參數  * @param mediaPath  *   待上傳的image/music 的path  * @return  * @throws Exception  */ public static String HttpsUploadMediaFile(String method, String path, Map<String, String> param, String mediaPath)   throws Exception {  String result = null;  URL url = new URL(setParmas(param, path, ""));  OutputStream output = null;  DataInputStream inputStream = null;  try {   File file = new File(mediaPath);   if (!file.isFile() || !file.exists()) {    throw new IOException("file is not exist");   }   HttpURLConnection con = (HttpURLConnection) url.openConnection();   con.setDoInput(true);   con.setDoOutput(true);   con.setUseCaches(false);   con.setRequestMethod(SystemConfig.POST_METHOD);   // 設置請求頭信息   con.setRequestProperty("Connection", "Keep-Alive");   con.setRequestProperty("Charset", SystemConfig.DEFAULT_CHARACTER_ENCODING);   // 設置邊界   String boundary = "----------" + System.currentTimeMillis();   con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);   // 請求正文信息   // 第一部分   output = new DataOutputStream(con.getOutputStream());   IOUtils.write(("--" + boundary + "/r/n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);   IOUtils.write(("Content-Disposition: form-data;name=/"media/"; filename=/"" + file.getName() + "/"/r/n")     .getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);   IOUtils.write(     "Content-Type:application/octet-stream/r/n/r/n".getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING),     output);   // IOUtils.write(("Content-Type: "+ fileExt + "/r/n/r/n").getBytes(), output);   // 文件正文部分   // 把文件已流文件的方式 推入到url中   inputStream = new DataInputStream(new FileInputStream(file));   IOUtils.copy(inputStream, output);   // 結尾部分   IOUtils.write(("/r/n--" + boundary + "--/r/n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);   output.flush();   result = inputStreamToString(con.getInputStream());  } catch (MalformedURLException e) {   e.printStackTrace();  } catch (ProtocolException e) {   e.printStackTrace();  } catch (IOException e) {   throw new IOException("read data error");  } finally {   IOUtils.closeQuietly(output);   IOUtils.closeQuietly(inputStream);  }  return result; }  /**  * 上傳媒體文件(不能本地)  *  * @param method  *   請求方法 GET/POST  * @param path  *   api的路徑  * @param param  *   api參數  * @param mediaPath  *   待上傳的image/music 的path  * @param connTime  *   連接時間 默認為5000  * @param readTime  *   讀取時間 默認為5000  * @return  * @throws Exception  */ public static String HttpsUploadMedia(String method, String path, Map<String, String> param, String mediaPath,   int connTime, int readTime) throws Exception {  String result = "";  URL url = new URL(setParmas(param, path, ""));  OutputStream output = null;  BufferedInputStream inputStream = null;  try {   String boundary = "----";   HttpURLConnection conn = getConnection(method, url);   conn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);   conn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);   output = conn.getOutputStream();   URL mediaUrl = new URL(mediaPath);   if (mediaUrl != null) {    HttpURLConnection mediaConn = (HttpURLConnection) mediaUrl.openConnection();    mediaConn.setDoOutput(true);    mediaConn.setUseCaches(false);    mediaConn.setRequestMethod(SystemConfig.GET_METHOD);    mediaConn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);    mediaConn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);    String connType = mediaConn.getContentType();    // 獲得文件擴展    String fileExt = getFileExt(connType);    IOUtils.write(("--" + boundary + "/r/n").getBytes(), output);    IOUtils.write(("Content-Disposition: form-data; name=/"media/"; filename=/"" + getFileName(mediaPath)      + "/"/r/n").getBytes(), output);    IOUtils.write(("Content-Type: " + fileExt + "/r/n/r/n").getBytes(), output);    inputStream = new BufferedInputStream(mediaConn.getInputStream());    IOUtils.copy(inputStream, output);    IOUtils.write(("/r/n----" + boundary + "--/r/n").getBytes(), output);    mediaConn.disconnect();    // 獲取輸入流    result = inputStreamToString(conn.getInputStream());   }  } catch (MalformedURLException e) {   e.printStackTrace();  } catch (ProtocolException e) {   e.printStackTrace();  } catch (IOException e) {   e.printStackTrace();  } finally {   IOUtils.closeQuietly(output);   IOUtils.closeQuietly(inputStream);  }  return result; }  /**  * 上傳Video媒體文件(本地)  *  * @param method  *   請求方法 GET/POST  * @param path  *   api的路徑  * @param param  *   api參數  * @param mediaPath  *   待上傳的voide 的path  * @param title  *   視頻標題  * @param introduction  *   視頻描述  * @return  * @throws Exception  */ public static String HttpsUploadVideoMediaFile(String method, String path, Map<String, String> param,   String mediaPath, String title, String introduction) throws Exception {  String result = null;  URL url = new URL(setParmas(param, path, ""));  OutputStream output = null;  DataInputStream inputStream = null;  try {   File file = new File(mediaPath);   if (!file.isFile() || !file.exists()) {    throw new IOException("file is not exist");   }   HttpURLConnection con = (HttpURLConnection) url.openConnection();   con.setDoInput(true);   con.setDoOutput(true);   con.setUseCaches(false);   con.setRequestMethod(SystemConfig.POST_METHOD);   // 設置請求頭信息   con.setRequestProperty("Connection", "Keep-Alive");   con.setRequestProperty("Charset", SystemConfig.DEFAULT_CHARACTER_ENCODING);   // 設置邊界   String boundary = "----------" + System.currentTimeMillis();   con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);   // 請求正文信息   // 第一部分   output = new DataOutputStream(con.getOutputStream());   IOUtils.write(("--" + boundary + "/r/n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);   IOUtils.write(("Content-Disposition: form-data;name=/"media/"; filename=/"" + file.getName() + "/"/r/n")     .getBytes(), output);   IOUtils.write("Content-Type: video/mp4 /r/n/r/n".getBytes(), output);   // 文件正文部分   // 把文件已流文件的方式 推入到url中   inputStream = new DataInputStream(new FileInputStream(file));   IOUtils.copy(inputStream, output);   // 結尾部分   IOUtils.write(("--" + boundary + "/r/n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);   IOUtils.write("Content-Disposition: form-data; name=/"description/";/r/n/r/n"     .getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);   IOUtils.write(("{/"title/":/"" + title + "/",/"introduction/":/"" + introduction + "/"}")     .getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);   IOUtils.write(("/r/n--" + boundary + "--/r/n/r/n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING),     output);   output.flush();   result = inputStreamToString(con.getInputStream());  } catch (MalformedURLException e) {   e.printStackTrace();  } catch (ProtocolException e) {   e.printStackTrace();  } catch (IOException e) {   throw new IOException("read data error");  } finally {   IOUtils.closeQuietly(output);   IOUtils.closeQuietly(inputStream);  }  return result; }  /**  * 上傳Video媒體文件(網絡)  *  * @param method  *   請求方法 GET/POST  * @param path  *   api的路徑  * @param param  *   api參數  * @param mediaPath  *   待上傳的voide 的path  * @param title  *   視頻標題  * @param introduction  *   視頻描述  * @param connTime  *   連接時間 默認為5000  * @param readTime  *   讀取時間 默認為5000  * @return  * @throws Exception  */ public static String HttpsUploadVideoMedia(String method, String path, Map<String, String> param, String mediaPath,   String title, String introduction, int connTime, int readTime) throws Exception {  String result = null;  URL url = new URL(setParmas(param, path, ""));  OutputStream output = null;  BufferedInputStream inputStream = null;  try {   String boundary = "----";   HttpURLConnection conn = getConnection(method, url);   conn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);   conn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);   output = conn.getOutputStream();   URL mediaUrl = new URL(mediaPath);   if (mediaUrl != null) {    HttpURLConnection mediaConn = (HttpURLConnection) mediaUrl.openConnection();    mediaConn.setDoOutput(true);    mediaConn.setUseCaches(false);    mediaConn.setRequestMethod(SystemConfig.GET_METHOD);    mediaConn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);    mediaConn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);    IOUtils.write(("--" + boundary + "/r/n").getBytes(), output);    IOUtils.write(("Content-Disposition: form-data; name=/"media/"; filename=/"" + getFileName(mediaPath)      + "/"/r/n").getBytes(), output);    IOUtils.write("Content-Type: video/mp4 /r/n/r/n".getBytes(), output);    inputStream = new BufferedInputStream(mediaConn.getInputStream());    IOUtils.copy(inputStream, output);    // 結尾部分    IOUtils.write(("--" + boundary + "/r/n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);    IOUtils.write("Content-Disposition: form-data; name=/"description/";/r/n/r/n"      .getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);    IOUtils.write(("{/"title/":/"" + title + "/",/"introduction/":/"" + introduction + "/"}")      .getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);    IOUtils.write(("/r/n--" + boundary + "--/r/n/r/n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING),      output);    mediaConn.disconnect();    // 獲取輸入流    result = inputStreamToString(conn.getInputStream());   }  } catch (MalformedURLException e) {   e.printStackTrace();  } catch (ProtocolException e) {   e.printStackTrace();  } catch (IOException e) {   throw new IOException("read data error");  } finally {   IOUtils.closeQuietly(output);   IOUtils.closeQuietly(inputStream);  }  return result; } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久中文字幕| 日韩大片在线观看视频| 日韩福利视频在线观看| 国产91精品久久久久久| 中文字幕在线观看日韩| 欧美成人亚洲成人| 国产精品视频久久久| 欧美激情a∨在线视频播放| 7m精品福利视频导航| 亚洲欧洲国产伦综合| 久久精品色欧美aⅴ一区二区| 日本一区二三区好的精华液| 欧美三级欧美成人高清www| 97国产精品视频人人做人人爱| 一本色道久久88综合日韩精品| 久热精品视频在线观看| 国产亚洲欧洲在线| 97色在线视频| 久久久久久久av| 日韩av一区二区在线观看| 亚洲男人天堂久| 高清视频欧美一级| 亚洲福利影片在线| 日韩精品免费看| 亚洲国内精品在线| 538国产精品一区二区在线| 91精品在线播放| 国产精品美女久久久久av超清| 国内精品美女av在线播放| 91精品视频在线免费观看| 欧美高清在线视频观看不卡| 在线播放国产一区中文字幕剧情欧美| 国产不卡一区二区在线播放| 亚洲精品有码在线| 国产一区二区三区视频在线观看| 日韩在线观看免费全| 欧美大片在线看免费观看| 日韩中文字幕不卡视频| 91精品国产综合久久久久久蜜臀| 久久午夜a级毛片| 操日韩av在线电影| 热门国产精品亚洲第一区在线| 成人高h视频在线| 性欧美xxxx交| 日本韩国欧美精品大片卡二| 亚洲天堂免费在线| 亚洲资源在线看| 国产精品久久久久久久久久99| 亚洲精品一区二区久| 国产精品爱久久久久久久| 亚洲在线一区二区| 国产精品日韩欧美大师| 国产成人精品免高潮在线观看| 26uuu久久噜噜噜噜| 成人网欧美在线视频| 久久久久999| 亚洲精品成人久久久| 欧美极品xxxx| 正在播放国产一区| 久久久久久久久久久av| 欧美一区三区三区高中清蜜桃| 日韩大片免费观看视频播放| 欧美日韩免费区域视频在线观看| 欧美日韩国产在线播放| 日韩中文视频免费在线观看| 成人av.网址在线网站| 亚洲a区在线视频| 亚洲国产小视频在线观看| 麻豆国产精品va在线观看不卡| 精品久久久久久亚洲国产300| 亚洲第一视频在线观看| 日本精品性网站在线观看| 欧美在线一区二区视频| 日韩精品在线观看一区| 国产精品亚洲аv天堂网| 欧美日韩亚洲高清| 91国产精品电影| 成人福利网站在线观看| 亚洲娇小xxxx欧美娇小| 亚洲精品www久久久| 2018国产精品视频| 欧美俄罗斯性视频| 欧美国产日韩中文字幕在线| 久久综合伊人77777尤物| 精品国偷自产在线视频| 精品久久久久人成| 欧美黑人一区二区三区| 最好看的2019年中文视频| 国产精品日韩av| 中文字幕日韩在线播放| 欧美日韩一区二区免费在线观看| 成人美女免费网站视频| 欧美激情一区二区久久久| 在线亚洲午夜片av大片| 亚洲影院色在线观看免费| 日韩精品免费综合视频在线播放| 日韩午夜在线视频| 亚洲人成网站999久久久综合| xvideos亚洲| 日韩av电影免费观看高清| 日韩精品极品毛片系列视频| 国产精品久久久久久中文字| 91色琪琪电影亚洲精品久久| 精品亚洲国产成av人片传媒| 亚洲人成毛片在线播放| 亚洲永久在线观看| 92版电视剧仙鹤神针在线观看| 日韩av网站导航| 麻豆乱码国产一区二区三区| 疯狂欧美牲乱大交777| 91精品啪aⅴ在线观看国产| 欧美日韩国产在线播放| 日韩av一区二区在线观看| 亚洲天堂男人天堂| 亚洲国产精品yw在线观看| 在线亚洲国产精品网| 国产精品中文久久久久久久| 日韩精品视频中文在线观看| 日韩精品视频在线观看免费| 日本精品va在线观看| 欧美体内谢she精2性欧美| 久久久精品2019中文字幕神马| 欧美激情第三页| 在线观看成人黄色| 国产精品一区二区女厕厕| 久久五月情影视| 国产拍精品一二三| 98精品国产高清在线xxxx天堂| 91在线观看免费高清完整版在线观看| 欧美亚洲国产视频| 国产激情综合五月久久| 琪琪亚洲精品午夜在线| 搡老女人一区二区三区视频tv| 久久久久久免费精品| 日韩精品免费在线观看| 欧美日韩亚洲天堂| 日韩电影免费观看在线观看| 国内精品久久久久久影视8| 欧美大荫蒂xxx| 欧美日韩视频在线| 欧美一区二区三区免费视| 久久香蕉精品香蕉| 色婷婷av一区二区三区在线观看| 久久久久久久久国产| 欧美丰满少妇xxxxx| 欧美亚洲视频在线观看| 日韩欧美在线播放| 国产免费亚洲高清| 欧美激情精品久久久久| 亚洲精品久久视频| 久久精视频免费在线久久完整在线看| 久久精品成人欧美大片古装| 国产精品欧美日韩一区二区| 一区二区三区四区精品| 日韩精品免费在线| 91在线视频免费| 国产精品99久久99久久久二8| 疯狂蹂躏欧美一区二区精品| 国产日韩在线视频| 日韩欧美视频一区二区三区| 欧美高清视频在线播放| 成人有码在线播放| 国产精品极品尤物在线观看| 欧美精品成人在线|