精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Nacos + 適配器 動態實現 OSS 無感切換!

開發
在一個微服務項目里,倘若我們要修改具體使用的云存儲廠商,就會致使 controller 層和 service 層發生變動,這并不符合低耦合的理念。在這種情況下,我們完全可以采用適配器模式來開展項目開發!

在一個微服務項目里,我們的 OSS 云存儲服務常常需要配置諸如阿里云、騰訊云、minio 等多個云存儲廠商的業務代碼,而且后續無法確保是否會增添新的云存儲廠商。

此時,倘若我們要修改具體使用的云存儲廠商,就會致使 controller 層和 service 層發生變動,這并不符合低耦合的理念。

在這種情況下,我們完全可以采用適配器模式來開展項目開發!

之前也介紹過另外一種封裝,看陳某之前的文章:《企業級的OSS對象存儲服務,這樣封裝萬能好用!

一、適配器模式改造

MinioUtils和AliyunUtils被適配者類作為源接口執行原子性操作的具體邏輯各不相同,想要把多個OSS共用一個相同的接口返回,就需要使用到適配器模式。

1. 被適配器類

@Component
publicclass MinioUtil {
    @Resource
    private MinioClient minioClient;

    /**
     * 創建Bucket桶(文件夾目錄)
     */
    public void createBucket(String bucket) throws Exception {
        boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
        if(!exists) { //不存在創建
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
        }
    }

    /**
     * 上傳文件
     * inputStream:處理文件的輸入流
     * bucket:桶名稱
     * objectName:桶中的對象名稱,也就是上傳后的文件在存儲桶中的存儲路徑和文件名。
     * stream(inputStream:處理文件的輸入流,-1:指定緩沖區大小的參數[-1為默認大小], 5242889L:指定文件內容長度的上限)
     */
    public void uploadFile(InputStream inputStream, String bucket, String objectName) throws Exception {
        minioClient.putObject(PutObjectArgs.builder().bucket(bucket).object(objectName)
                .stream(inputStream, -1, 5242889L).build());
    }


}

這是目標接口 **(目標抽象類,即客戶需要的方法)**,我們想要的不同OSS都可通過該接口進行操作:

/**
 * 為了方便切換任何一個oss,我們將公共方法抽取為接口,由某個oss的實現類去編寫具體邏輯
 */
public interface StorageAdapter {
    /**
     * 創建bucket
     * @param bucket
     */
    void createBucket(String bucket);

    /**
     * 上傳文件
     * @param multipartFile
     * @param bucket
     * @param objectName
     */
    void uploadFile(MultipartFile multipartFile, String bucket, String objectName);

    /**
     * 獲取文件在oss中的url
     * @param bucket
     * @param objectName
     * @return
     */
    String getUrl(String bucket, String objectName);

}

2. Minio適配器類

通過繼承或者組合方式,將被適配者類(minioUtils)的接口與目標抽象類的接口轉換起來,使得客戶端可以按照目標抽象類的接口進行操作。

/**
 * Minio相關操作的具體邏輯
 */
@Log4j2
publicclass MinioStorageAdapter implements StorageAdapter {

    @Resource
    private MinioUtil minioUtil;

    @Value("${minio.url}")
    private String url;

    @Override
    @SneakyThrows//Lombok中的注解 會在編譯期補上異常處理
    public void createBucket(String bucket) {
        minioUtil.createBucket(bucket);
    }

    /**
     * 上傳文件
     * @param multipartFile
     * @param bucket
     * @param objectName 為空,文件路徑為根目錄;不為空,文件路徑為objectName目錄下
     */
    @Override
    @SneakyThrows
    public void uploadFile(MultipartFile multipartFile, String bucket, String objectName) {
        minioUtil.createBucket(bucket);
        if(objectName != null) {
            minioUtil.uploadFile(multipartFile.getInputStream(), bucket, objectName + "/" + multipartFile.getOriginalFilename());
        } else {
            minioUtil.uploadFile(multipartFile.getInputStream(), bucket, multipartFile.getOriginalFilename());
        }
    }

    /**
     * 獲取文件在oss中的url
     * @param bucket
     * @param objectName
     * @return
     */
    @Override
    public String getUrl(String bucket, String objectName) {
        return url + "/" + bucket + "/" + objectName;
    }


}

3. Aliyun適配器類

/**
 * 阿里云oss 具體實現邏輯
 */
publicclass AliStorageAdapter implements StorageAdapter {

    @Override
    public void createBucket(String bucket) {
        System.out.println("aliyun");
    }

    @Override
    public void uploadFile(MultipartFile multipartFile, String bucket, String objectName) {

    }

    @Override
    public String getUrl(String bucket, String objectName) {
        return"aliyun";
    }

}

二、定義StorageConfig類來獲取指定的文件適配器

通過Nacos的動態配置讀取來得到當前的storageType。

此時如果想再加入一個新的OSS對象(得到xxUtils jar包等,我們無法進行修改),只需新增一個xxadapter適配器類且在@Bean注解的方法中加一個else即可。

注意:這里直接使用new的方式創建實現類(實現類也不需要使用@Service注解),而不是先把所有的實現類通過注解定義出來,再直接返回對象,這樣如果新增一個OSS的話,不光要加else,還需再把實現類通過直接定義出來。

@Configuration
publicclass StorageConfig {
    @Value("${storage.service.type}")
    private String storageType;
    @Bean
    public StorageAdapter storageAdapter() {
        if("minio".equals(storageType)) {
            returnnew MinioStorageAdapter();
        } elseif("aliyun".equals(storageType)) {
            returnnew AliStorageAdapter();
        } else {
            thrownew IllegalArgumentException("為找到對應的文件存儲處理器");
        }
    }
}

三、新增FileService防腐

提高可維護性:

/**
 * FileService防腐層 
 使用fileService(相當于domain防腐層)與adapter(相當于service層只做原子性操作)進行交互、Utils相當于dao層
 */
@Component
publicclass FileService {
    /**
     * 通過構造函數注入
     */
    privatefinal StorageAdapter storageAdapter;

    public FileService(StorageAdapter storageAdapter) {
        this.storageAdapter = storageAdapter;
    }

    /**
     * 創建bucket
     * @param bucket
     */
    public void createBucket(String bucket) {
        storageAdapter.createBucket(bucket);
    }

    /**
     * 上傳圖片、返回圖片在minio的地址
     * @param multipartFile
     * @param bucket
     * @param objectName
     */
    public String uploadFile(MultipartFile multipartFile, String bucket, String objectName) {
        storageAdapter.uploadFile(multipartFile, bucket, objectName);
        objectName = (StringUtils.isEmpty(objectName) ? "" : objectName + "/") + multipartFile.getOriginalFilename();
        return storageAdapter.getUrl(bucket, objectName);
    }
}

四、Controller層

Controller層通過注入FileService來進行操作:

@RestController
@Log4j2
publicclass FileController {
    @Resource//根據名稱注入
    private FileService fileService;

    /**
     * 上傳文件, 返回文件在oss中的地址
     * @param uploadFile:文件, getOriginalFilename獲取原始文件名
     * @param bucket:桶名稱
     * @param objectName:上傳后的文件在存儲桶中的存儲路徑(存儲目錄)
     * @return String: 返回文件在minio的鏈接地址
     */
    @PostMapping("/upload")
    public Result<String> upload(MultipartFile uploadFile, String bucket, String objectName) throws Exception {
        try {
            Preconditions.checkArgument(!ObjectUtils.isEmpty(uploadFile), "文件不能為空");
            Preconditions.checkArgument(!StringUtils.isEmpty(bucket), "bucket桶名稱不能為空");
            if(log.isInfoEnabled()) {
                log.info("FileController.upload.uploadFile:{}, bucket:{}, objectName:{}", uploadFile.getOriginalFilename(), bucket, objectName);
            }
            String url = fileService.uploadFile(uploadFile, bucket, objectName);
            return Result.ok(url);
        } catch (Exception e) {
            log.info("FileController.upload.error:{}", e.getMessage(), e);
            return Result.fail("上傳文件失敗");
        }
    }

}

五、Nacos搭建

1. Nacos部署

服務器需開啟8848、9848端口:

docker search nacos
docker pull nacos/nacos-server
# 鏡像拉完之后,啟動腳本
docker run -d \
  --name nacos \
  --privileged  \
  --cgroupns host \
  --env JVM_XMX=256m \
 --env MODE=standalone \
  --env JVM_XMS=256m \
  -p 8848:8848/tcp \
  -p 9848:9848/tcp \
  --restart=always \
  -w /home/nacos \
  nacos/nacos-server

(1) privileged:賦予容器擴展的特權

(2) cgroupns host:讓容器使用宿主機的 cgroup 命名空間(在資源限制方面容器會遵循宿主機規則)

(3) env:設置Nacos服務使用的jvm參數

  • JVM_XMX:最大堆內存為 256m
  • JVM_XMS:初始堆內存為 256 m

(4) env MODE=standalone:nacos運行模式為單機模式

(5) w /home/nacos:指定容器內的工作目錄為 “/home/nacos”,容器內執行的命令如果涉及到相對路徑的操作,就會以這個目錄作為當前工作目錄的基準。

(6) 8848:Nacos服務端端口

(7) 9848:客戶端gRPC請求服務端端口

2. 引入nacos客戶依賴

除了引入nacos依賴,還要引入log4j2依賴,來輸出nacos日志信息。

SpringCloudAlibaba 版本為2.2.6.RELEASE時,springboot版本要為2.3.8.RELEASE:

<!--nacos依賴(配合日志,打印nacos信息)-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <version>2.4.2</version>
</dependency>

3. 編寫配置文件

把nacos相關配置寫入bootstrap.yml文件中,項目啟動后會優先讀取。

spring:
  application:
    name:jc-club-oss#微服務名稱
profiles:
    active:dev#指定環境為開發環境
cloud:
    nacos:
      server-addr:117.72.118.73:8848
      config:
        file-extension:yaml#文件后綴名

4. 新增配置管理

dataId:jc-club-oss-dev.yaml 服務名稱+開發環境.yaml。

配置內容:

這時spring會根據bootstrap.yml文件中的${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作為文件id,來讀取配置。

5. 添加@RefreshScope注解開啟熱更新

  • 在@Value注入的變量所在類上添加注解@RefreshScop,當配置文件內容發生變化后會重新讀取
  • 當文件更新后,Bean已加入到了IOC容器,即使storageType屬性值變了,Bean也無法重新加載。
  • 所以在@Bean方法上也要加入@RefreshScop注解,當文件更新后,帶有此注解的Bean能夠自動重新初始化
@Configuration
@RefreshScope
publicclass StorageConfig {

    @Value("${storage.service.type}")
    private String storageType;
    
    @Bean
    @RefreshScope
    public StorageAdapter storageAdapter() {
        if("minio".equals(storageType)) {
            returnnew MinioStorageAdapter();
        } elseif("aliyun".equals(storageType)) {
            returnnew AliStorageAdapter();
        } else {
            thrownew IllegalArgumentException("為找到對應的文件存儲處理器");
        }
    }
}

6. 測試

(1) type為阿里云

結果為:成功返回aliyun

(2) 修改屬性為minio

結果為:圖片成功上傳。

在配置文件更新時,nacos也會打印出對應的日志提示:

2024-12-03 17:05:50.719  INFO 35932 --- [.72.118.73_8848] o.s.c.e.e.RefreshEventListener           : Refresh keys changed: [storage.service.type]
責任編輯:趙寧寧 來源: 碼猿技術專欄
相關推薦

2012-09-19 15:29:26

Worklight適配器

2020-10-25 08:56:21

適配器模式

2022-02-18 17:21:29

適配器模式客戶端

2024-04-10 12:27:43

Python設計模式開發

2021-02-18 08:39:28

設計模式場景

2015-08-07 10:05:37

recyclervie超省寫法

2013-11-26 16:39:21

Android設計模式

2012-05-16 17:22:11

Java設計模式

2009-12-21 10:26:09

Oracle適配器

2018-10-11 10:38:31

前端JavaScript編程語言

2009-11-18 18:08:20

PHP適配器模式

2021-02-16 08:16:09

適配器模式MybatisJava

2021-08-06 06:51:16

適配器配置Spring

2022-02-13 23:33:24

設計模式Java

2014-12-17 09:57:01

AndroidAdapteViewHolder

2011-04-28 09:54:50

jQuery

2013-02-26 10:55:47

C#適配器設計模式

2014-07-17 10:55:10

Win8.1應用開發適配器模式

2012-08-02 10:46:34

JavaAdapter模式

2024-02-22 12:13:49

適配器模式代碼
點贊
收藏

51CTO技術棧公眾號

国产亚洲精品一区二555| 亚洲一区二区三区三| 国产精品午夜一区二区欲梦| 亚洲精品电影院| 一区二区三区视频播放| 欧美性videos高清精品| 亚洲一区在线直播| 亚洲精品成av人片天堂无码 | 日本电影久久久| 一区二区不卡在线播放| 欧美一区1区三区3区公司| 国产精品久久久久久免费免熟| 亚洲高清不卡| 日韩中文字幕免费视频| 大桥未久恸哭の女教师| 欧美aaa级| 狠狠躁夜夜躁久久躁别揉| 亚洲综合视频一区| 偷拍自拍在线视频| 国产一区二区看久久| 欧美综合国产精品久久丁香| 在线观看成人毛片| 国产精品入口久久| 欧美成人在线直播| 做a视频在线观看| 另类专区亚洲| 亚洲成av人片| 400部精品国偷自产在线观看| 欧美美女搞黄| 成人av电影免费在线播放| 国产日产欧美a一级在线| 久久免费激情视频| 亚洲调教视频在线观看| 色噜噜狠狠狠综合曰曰曰| aaaaa一级片| youjizz亚洲| 日韩一区二区三区视频| 天天操,天天操| 浪潮色综合久久天堂| 亚洲成人激情综合网| 亚洲色婷婷久久精品av蜜桃| 亚洲乱亚洲乱妇| 欧美激情一区二区三区蜜桃视频| 久久伊人一区二区| 人妻夜夜爽天天爽| 成人性生交大片免费看视频在线| 91在线精品播放| 在线观看国产黄| 日本aⅴ免费视频一区二区三区| 91精品国产91久久久久| 国产真实夫妇交换视频| 欧美色图麻豆| 久久99亚洲热视| 超碰手机在线观看| 午夜激情一区| 欧美xxxx18国产| 色婷婷在线视频观看| 日韩大片在线播放| 中文字幕日韩精品在线| 你懂得视频在线观看| 成人av资源电影网站| 国产亚洲精品美女久久久| 亚洲自拍偷拍图| 色爱综合网欧美| 日韩日本欧美亚洲| www.av视频| 黄色日韩在线| 欧美性资源免费| 亚洲无码精品一区二区三区| 日本vs亚洲vs韩国一区三区二区 | 国产欧美一区二区在线| 日韩中文一区| 黄色一级片在线观看| 最新不卡av在线| 黄色网在线视频| 2019中文字幕在线电影免费 | 中文字幕欧美在线观看| 美女国产一区二区三区| 91在线观看免费高清完整版在线观看| 午夜久久久久久久久久| 99re热视频精品| 天堂精品视频| 亚洲小说区图片| 五月天丁香久久| 黄色一级免费大片| 国产精品亚洲欧美日韩一区在线| 精品嫩草影院久久| 亚洲精品成人无码| 2023国产精品久久久精品双| 欧美激情综合亚洲一二区| 国产又爽又黄的视频| 日韩成人免费电影| caoporn国产精品免费公开| 午夜成人免费影院| 国产精品蜜臀在线观看| 欧美这里只有精品| 欧美色网在线| 欧美xxxxxxxxx| 国产jk精品白丝av在线观看| 亚洲成人tv| 欧美一级淫片aaaaaaa视频| 中文字幕在线观看1| 成人黄色一级视频| 亚洲一区3d动漫同人无遮挡 | 日韩欧美国产三级电影视频| 性久久久久久久久久久| 日韩一级毛片| 97久久国产精品| 一本一道人人妻人人妻αv| 成人午夜av电影| 亚洲一区二区四区| 中文字幕影音在线| 精品国产网站在线观看| 久久精品国产亚洲AV成人婷婷| 亚洲激情自拍| 亚洲影视九九影院在线观看| 黄色片免费在线| 亚洲国产美女搞黄色| 午夜精品中文字幕| 免费成人av| 91成人在线观看国产| 国产黄a三级三级三级| 欧美激情综合五月色丁香小说| 福利视频一二区| 高清一区二区中文字幕| 国产亚洲视频在线观看| 国产三级av片| 成人自拍视频在线| 4444在线观看| 国模大尺度视频一区二区| 亚洲免费av网址| 青青操免费在线视频| 国产成人超碰人人澡人人澡| 一区二区在线中文字幕电影视频| 午夜欧美巨大性欧美巨大| 亚洲激情中文字幕| 久久久久无码精品国产| 激情文学综合插| 中文字幕久久综合| 青青在线精品| 久久久国产影院| 一级全黄少妇性色生活片| 久久精品视频免费| 成人在线观看a| 久久99国内| 国产成人福利网站| 色综合成人av| 日韩欧美中文字幕在线播放| 91av在线免费| 欧美专区一区二区三区| 欧美最大成人综合网| 日韩电影免费观| 一本色道久久综合狠狠躁篇的优点 | 欧美色另类天堂2015| 黄色片视频免费观看| 99在线精品视频在线观看| 麻豆91蜜桃| 91精品xxx在线观看| 亚洲新中文字幕| 中文天堂在线视频| 日韩一区欧美小说| 日韩久久久久久久久久久| 欧美日韩亚洲国产精品| 国新精品乱码一区二区三区18| 草草视频在线| 亚洲视频在线看| 亚洲影院一区二区三区| 亚洲男人天堂av| 在线观看免费视频国产| 亚洲每日在线| 日本午夜精品电影| 欧美亚洲人成在线| 欧美国产日本在线| 四虎在线观看| 欧美自拍偷拍午夜视频| 尤物在线免费视频| 成人动漫中文字幕| 一级特黄性色生活片| 久久久精品久久久久久96| 成人资源视频网站免费| av高清不卡| 日韩在线观看你懂的| 亚洲av无码乱码国产麻豆| 精品久久久久久电影| 天堂资源在线视频| 国产白丝精品91爽爽久久| 日韩欧美国产免费| 99久久久国产精品美女| 国产伦精品一区二区三区四区免费| 正在播放日韩精品| 少妇精69xxtheporn| 亚洲欧美强伦一区二区| 色一区在线观看| 青娱乐国产在线| 久久久综合九色合综国产精品| 国产色视频在线播放| 亚洲高清免费| 亚洲欧美精品| 精品亚洲自拍| 国产情人节一区| 男人天堂视频在线观看| 久久久极品av| 国产原创av在线| 日韩精品一区二区三区视频播放 | 国产精品一区在线| 十八禁视频网站在线观看| 欧美a级片网站| 少妇精品久久久久久久久久| 欧美电影免费网站| 91在线免费视频| 四虎成人在线| 91成人在线观看国产| av在线免费播放| 一本色道久久88精品综合| 免费看日韩av| 欧美一区二区啪啪| 中文在线免费观看| 岛国av一区二区| 久青草视频在线观看| 中文字幕亚洲一区二区av在线| 中文字幕人妻一区二区| 成人午夜在线免费| 中文写幕一区二区三区免费观成熟| 日本视频一区二区三区| 国产91在线视频观看| 国内自拍视频一区二区三区| 在线观看免费黄色片| 欧美手机视频| 欧美日韩三区四区| 美女视频亚洲色图| 国产精品xxxx| 警花av一区二区三区| 国产精品一区二区三区久久| 欧洲亚洲两性| 国产精品1区2区在线观看| 午夜久久中文| 97精品免费视频| a国产在线视频| 国内揄拍国内精品少妇国语| 欧美人与动牲性行为| 欧美日韩国产91| 青春草视频在线观看| 欧美激情va永久在线播放| 成人国产免费电影| 欧美不卡视频一区发布| 国产日产一区二区| 久久天天躁狠狠躁夜夜av| 精品51国产黑色丝袜高跟鞋| 久久精品电影网站| 黄色免费网站在线观看| 大胆人体色综合| 亚洲婷婷噜噜| 亚洲91精品在线观看| 天堂资源在线| 国产精品九九久久久久久久| 粉嫩91精品久久久久久久99蜜桃| 国产精品欧美久久久| 日韩成人在线电影| 91精品久久香蕉国产线看观看| 91久久精品无嫩草影院| 国产一级二级三级精品| 欧美综合自拍| 欧洲精品一区色| 91麻豆精品国产91久久久平台| 国产三级中文字幕| 欧美高清日韩| 妞干网在线视频观看| 国产精品社区| 在线免费观看视频黄| 国内成+人亚洲+欧美+综合在线| 免费人成视频在线播放| 成人高清视频在线| 国产ts在线播放| 国产精品狼人久久影院观看方式| 国产精品精品软件男同| 亚洲一二三四区| 亚洲综合图片网| 欧美日韩国产中文| 亚洲精品国产精品国| 国产午夜精品久久久 | 欧美激情手机在线视频| 日韩理论视频| 成人欧美在线视频| 狼人天天伊人久久| 色一情一区二区三区四区| 亚洲色图88| av网站在线观看不卡| 国内不卡的二区三区中文字幕 | 国产精品久久影院| 福利所第一导航| 日韩欧美第一页| 国产精品人妻一区二区三区| 亚洲国产古装精品网站| 香蕉视频网站在线观看| 97久久伊人激情网| 久久人人视频| 久久精品人人做人人爽电影| 99精品网站| 免费欧美一级视频| 国产乱妇无码大片在线观看| 国产成人精品无码免费看夜聊软件| 亚洲三级电影全部在线观看高清| 成人免费区一区二区三区| 69堂成人精品免费视频| 日本人妖在线| 欧美精品国产精品日韩精品| 欧美亚洲黄色| 日韩三级电影| 国产欧美欧美| 免费黄视频在线观看| 国产精品丝袜久久久久久app| 国产精品6666| 日韩欧美国产三级电影视频| 永久av在线| 国产精品18久久久久久麻辣| 久久porn| www.国产在线视频| 国产中文字幕一区| 国产18无套直看片| 狠狠躁夜夜躁久久躁别揉| 免费看日韩av| 欧美激情精品久久久久久大尺度| 精品女同一区二区三区在线观看| 欧美日韩电影一区二区| 99精品国产一区二区青青牛奶 | 久久久免费观看| 国产成人久久精品一区二区三区| 亚洲电影免费| 蜜臀av亚洲一区中文字幕| 久久精品一区二区免费播放| 天天色综合天天| 天天色综合久久| 97在线观看免费| 国产成人在线中文字幕| 草草草视频在线观看| 国产成人精品三级| 男人与禽猛交狂配| 91麻豆精品国产91久久久使用方法| 国产二区视频在线观看| 国产999在线| 国内精品久久久久久99蜜桃| 免费黄色特级片| 国产亚洲一二三区| 久操视频在线免费观看| 国产亚洲精品成人av久久ww| 国产亚洲一区二区手机在线观看| 欧美连裤袜在线视频| 久久福利影视| 日本一区二区视频在线播放| 欧美三级三级三级| 免费黄色电影在线观看| 91视频免费网站| 午夜日韩电影| 喷水视频在线观看| 欧美日韩亚洲精品一区二区三区| 深夜视频在线免费| 欧美尤物巨大精品爽| av在线不卡免费观看| 青青草原国产在线视频| 亚洲欧美一区二区三区久本道91| 国产黄色大片网站| 国模精品系列视频| 九九综合久久| 天天做天天干天天操| 一区二区日韩av| 天天操天天舔天天干| 国产精品成人aaaaa网站| 久久香蕉国产| 日本xxxx免费| 色成人在线视频| 麻豆影视在线观看_| 97人人模人人爽视频一区二区| 亚洲日本免费| youjizz亚洲女人| 日韩欧美一区在线观看| 美女av在线免费看| 亚洲精品白虎| 懂色中文一区二区在线播放| 中文字幕精品三级久久久| 最近的2019中文字幕免费一页| 视频亚洲一区二区| 人妻有码中文字幕| 中文字幕亚洲成人| 日本精品一二区| 国产美女被下药99| 在线欧美三区| 天堂资源在线视频| 亚洲国产高潮在线观看| 久久电影天堂| 国产精品50p| 亚洲欧美另类久久久精品| 亚洲欧美综合一区二区| 国产日韩专区在线| 日韩午夜在线| 精品国产视频一区二区三区| 国产丝袜精品第一页| 亚洲电影一区| 99热一区二区| 福利一区视频在线观看| 最新国产露脸在线观看|