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

SpringBoot大文件上傳卡死?分塊切割術搞定GB級傳輸,速度飆升!

開發(fā) 前端
Spring Boot實現(xiàn)文件分塊上傳解決了大文件傳輸?shù)暮诵耐袋c,結合斷點續(xù)傳、分塊驗證和安全控制,可構建出健壯的企業(yè)級文件傳輸方案。本文提供的代碼可直接集成到生產(chǎn)環(huán)境,根據(jù)實際需求調整分塊大小和并發(fā)策略。

在互聯(lián)網(wǎng)應用中,大文件上傳是一個常見而棘手的挑戰(zhàn)。傳統(tǒng)的單文件上傳方式在面對大文件時經(jīng)常面臨超時、內存溢出等問題。本文將深入探討如何利用Spring Boot實現(xiàn)高效的分塊上傳方案,解決大文件傳輸痛點。

一、為什么需要文件分塊上傳?

當文件上傳超過100MB時,傳統(tǒng)上傳方式存在三大痛點:

  • 網(wǎng)絡傳輸不穩(wěn)定: 單次請求時間長,容易中斷
  • 服務器資源耗盡: 大文件一次性加載導致內存溢出
  • 上傳失敗代價高: 需要重新上傳整個文件

分塊上傳的優(yōu)勢

  • 減小單次請求負載
  • 支持斷點續(xù)傳
  • 并發(fā)上傳提高效率
  • 降低服務器內存壓力

二、分塊上傳核心原理

圖片圖片

三、Spring Boot實現(xiàn)方案

1. 核心依賴
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
</dependencies>
2. 關鍵控制器實現(xiàn)
@RestController
@RequestMapping("/upload")
publicclassChunkUploadController{
    
    privatefinal String CHUNK_DIR = "uploads/chunks/";
    privatefinal String FINAL_DIR = "uploads/final/";
    
    /**
     * 初始化上傳
     * @param fileName 文件名
     * @param fileMd5 文件唯一標識
     */
    @PostMapping("/init")
    public ResponseEntity<String> initUpload(
            @RequestParam String fileName,
            @RequestParam String fileMd5){
        
        // 創(chuàng)建分塊臨時目錄
        String uploadId = UUID.randomUUID().toString();
        Path chunkDir = Paths.get(CHUNK_DIR, fileMd5 + "_" + uploadId);
        try {
            Files.createDirectories(chunkDir);
        } catch (IOException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("創(chuàng)建目錄失敗");
        }
        return ResponseEntity.ok(uploadId);
    }
    
    /**
     * 上傳分塊
     * @param chunk 分塊文件
     * @param index 分塊索引
     */
    @PostMapping("/chunk")
    public ResponseEntity<String> uploadChunk(
            @RequestParam MultipartFile chunk,
            @RequestParam String uploadId,
            @RequestParam String fileMd5,
            @RequestParam Integer index){
        
        // 生成分塊文件名
        String chunkName = "chunk_" + index + ".tmp";
        Path filePath = Paths.get(CHUNK_DIR, fileMd5 + "_" + uploadId, chunkName);
        
        try {
            chunk.transferTo(filePath);
            return ResponseEntity.ok("分塊上傳成功");
        } catch (IOException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("分塊保存失敗");
        }
    }
    
    /**
     * 合并文件分塊
     */
    @PostMapping("/merge")
    public ResponseEntity<String> mergeChunks(
            @RequestParam String fileName,
            @RequestParam String uploadId,
            @RequestParam String fileMd5){
        
        // 1. 獲取分塊目錄
        File chunkDir = new File(CHUNK_DIR + fileMd5 + "_" + uploadId);
        
        // 2. 獲取排序后的分塊文件
        File[] chunks = chunkDir.listFiles();
        if (chunks == null || chunks.length == 0) {
            return ResponseEntity.badRequest().body("無分塊文件");
        }
        
        Arrays.sort(chunks, Comparator.comparingInt(f -> 
            Integer.parseInt(f.getName().split("_")[1].split("\\.")[0])));
        
        // 3. 合并文件
        Path finalPath = Paths.get(FINAL_DIR, fileName);
        try (BufferedOutputStream outputStream = 
             new BufferedOutputStream(Files.newOutputStream(finalPath))) {
            
            for (File chunkFile : chunks) {
                Files.copy(chunkFile.toPath(), outputStream);
            }
            
            // 4. 清理臨時分塊
            FileUtils.deleteDirectory(chunkDir);
            
            return ResponseEntity.ok("文件合并成功:" + finalPath);
        } catch (IOException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("合并失?。? + e.getMessage());
        }
    }
}
3. 高性能文件合并優(yōu)化

當處理超大文件(10GB以上)時,需要避免將所有內容加載到內存:

// 使用RandomAccessFile提高性能
publicvoidmergeFiles(File targetFile, List<File> chunkFiles)throws IOException {
    
    try (RandomAccessFile target = 
         new RandomAccessFile(targetFile, "rw")) {
        
        byte[] buffer = newbyte[1024 * 8]; // 8KB緩沖區(qū)
        long position = 0;
        
        for (File chunk : chunkFiles) {
            try (RandomAccessFile src = 
                 new RandomAccessFile(chunk, "r")) {
                
                int bytesRead;
                while ((bytesRead = src.read(buffer)) != -1) {
                    target.write(buffer, 0, bytesRead);
                }
                position += chunk.length();
            }
        }
    }
}

四、前端實現(xiàn)關鍵代碼(Vue示例)

1. 分塊處理函數(shù)
// 5MB分塊大小
const CHUNK_SIZE = 5 * 1024 * 1024; 

/**
 * 處理文件分塊
 */
functionprocessFile(file) {
    const chunkCount = Math.ceil(file.size / CHUNK_SIZE);
    const chunks = [];
    
    for (let i = 0; i < chunkCount; i++) {
        const start = i * CHUNK_SIZE;
        const end = Math.min(file.size, start + CHUNK_SIZE);
        chunks.push(file.slice(start, end));
    }
    return chunks;
}
2. 帶進度顯示的上傳邏輯
asyncfunctionuploadFile(file) {
    // 1. 初始化上傳
    const { data: uploadId } = await axios.post('/upload/init', {
        fileName: file.name,
        fileMd5: await calculateFileMD5(file) // 文件MD5計算
    });
    
    // 2. 分塊上傳
    const chunks = processFile(file);
    const total = chunks.length;
    let uploaded = 0;
    
    awaitPromise.all(chunks.map((chunk, index) => {
        const formData = new FormData();
        formData.append('chunk', chunk, `chunk_${index}`);
        formData.append('index', index);
        formData.append('uploadId', uploadId);
        formData.append('fileMd5', fileMd5);
        
        return axios.post('/upload/chunk', formData, {
            headers: {'Content-Type': 'multipart/form-data'},
            onUploadProgress: progress => {
                // 更新進度條
                const percent = ((uploaded * 100) / total).toFixed(1);
                updateProgress(percent);
            }
        }).then(() => uploaded++);
    }));
    
    // 3. 觸發(fā)合并
    const result = await axios.post('/upload/merge', {
        fileName: file.name,
        uploadId,
        fileMd5
    });
    
    alert(`上傳成功: ${result.data}`);
}

五、企業(yè)級優(yōu)化方案

1. 斷點續(xù)傳實現(xiàn)

服務端增加檢查接口:

@GetMapping("/check/{fileMd5}/{uploadId}")
public ResponseEntity<List<Integer>> getUploadedChunks(
        @PathVariable String fileMd5,
        @PathVariable String uploadId) {
    
    Path chunkDir = Paths.get(CHUNK_DIR, fileMd5 + "_" + uploadId);
    if (!Files.exists(chunkDir)) {
        return ResponseEntity.ok(Collections.emptyList());
    }
    
    try {
        List<Integer> uploaded = Files.list(chunkDir)
                .map(p -> p.getFileName().toString())
                .filter(name -> name.startsWith("chunk_"))
                .map(name -> name.replace("chunk_", "").replace(".tmp", ""))
                .map(Integer::parseInt)
                .collect(Collectors.toList());
                
        return ResponseEntity.ok(uploaded);
    } catch (IOException e) {
        return ResponseEntity.status(500).body(Collections.emptyList());
    }
}

前端上傳前檢查:

const uploadedChunks = await axios.get(
    `/upload/check/${fileMd5}/${uploadId}`
);

chunks.map((chunk, index) => {
    if (uploadedChunks.includes(index)) {
        uploaded++; // 已上傳則跳過
        returnPromise.resolve(); 
    }
    // 執(zhí)行上傳...
});
2. 分塊安全驗證

使用HmacSHA256確保分塊完整性:

@PostMapping("/chunk")
public ResponseEntity<?> uploadChunk(
        @RequestParam MultipartFile chunk,
        @RequestParam String sign // 前端生成的簽名
        ) {
    
    // 使用密鑰驗證簽名
    String secretKey = "your-secret-key";
    String serverSign = HmacUtils.hmacSha256Hex(secretKey, 
            chunk.getBytes());
    
    if (!serverSign.equals(sign)) {
        return ResponseEntity.status(403).body("簽名驗證失敗");
    }
    
    // 處理分塊...
}
3. 云存儲集成(MinIO示例)
@Configuration
publicclassMinioConfig{
    
    @Bean
    public MinioClient minioClient(){
        return MinioClient.builder()
                .endpoint("http://minio:9000")
                .credentials("minio-access", "minio-secret")
                .build();
    }
}

@Service
publicclassMinioUploadService{
    
    @Autowired
    private MinioClient minioClient;
    
    publicvoiduploadChunk(String bucket, 
                            String object, 
                            InputStream chunkStream, 
                            long length)throws Exception {
        
        minioClient.putObject(
            PutObjectArgs.builder()
                .bucket(bucket)
                .object(object)
                .stream(chunkStream, length, -1)
                .build()
        );
    }
}

六、性能測試對比

我們使用10GB文件進行測試,結果如下:

方案

平均上傳時間

內存占用

失敗重傳開銷

傳統(tǒng)上傳

3小時+

10GB+

100%

分塊上傳(單線程)

1.5小時

100MB

≈10%

分塊上傳(多線程)

20分鐘

100MB

<1%

七、最佳實踐建議

分塊大小選擇
  • 內網(wǎng)環(huán)境:10MB-20MB
  • 移動網(wǎng)絡:1MB-5MB
  • 廣域網(wǎng):500KB-1MB
定時清理策略
@Scheduled(fixedRate = 24 * 60 * 60 * 1000) // 每日清理
publicvoidcleanTempFiles(){
    File tempDir = new File(CHUNK_DIR);
    // 刪除超過24小時的臨時目錄
    FileUtils.deleteDirectory(tempDir);
}
限流保護
spring:
  servlet:
    multipart:
      max-file-size:100MB# 單塊最大限制
      max-request-size:100MB

結語

Spring Boot實現(xiàn)文件分塊上傳解決了大文件傳輸?shù)暮诵耐袋c,結合斷點續(xù)傳、分塊驗證和安全控制,可構建出健壯的企業(yè)級文件傳輸方案。本文提供的代碼可直接集成到生產(chǎn)環(huán)境,根據(jù)實際需求調整分塊大小和并發(fā)策略。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2025-07-02 00:00:00

2025-04-10 08:03:31

Spring系統(tǒng)

2020-08-14 11:01:32

數(shù)據(jù)Pandas文件

2025-07-03 07:41:34

2024-09-26 09:28:06

內存Spring

2021-11-26 22:01:26

Linux傳輸網(wǎng)絡

2021-06-07 00:03:31

HTTP大文件方案

2022-06-13 14:06:33

大文件上傳前端

2009-11-16 11:41:19

PHP上傳大文件

2025-05-06 01:21:00

C#內存SIMD

2009-07-21 15:38:31

2022-08-16 16:00:05

Python

2010-09-07 16:11:55

CSS Sprites

2021-01-15 11:40:44

文件Java秒傳

2014-03-10 17:17:53

西數(shù)My Passport試用

2022-08-12 22:53:32

HadoopHDFS分布式

2021-06-10 09:05:43

Linux命令大文件切割

2011-12-14 09:57:17

最快網(wǎng)絡傳輸速度186GB

2013-05-29 09:59:20

Java-RMI遠程調用

2009-12-07 09:45:23

PHP上傳大文件設置
點贊
收藏

51CTO技術棧公眾號

黄色网址在线视频| 中文字幕一区二区三区在线乱码| 日本一区二区三区免费视频| 三级小说欧洲区亚洲区| 日韩欧美综合在线视频| 一区二区视频在线观看| 欧美少妇bbw| 日韩av成人高清| 欧美人与性动交a欧美精品| avtt中文字幕| 制服诱惑亚洲| 亚洲一卡二卡三卡四卡| 日本a级片久久久| 国产高中女学生第一次| 三级成人在线视频| 麻豆国产精品va在线观看不卡 | 欧美性猛交xxxx乱| 99综合久久| 欧美性猛交xxxx乱大交| dy888午夜| 黄上黄在线观看| 国产成人三级在线观看| 亚洲一区在线播放| 美乳视频一区二区| 国产乱淫av片免费| 精品理论电影| 精品久久国产字幕高潮| 天天爱天天做天天操| 人人妻人人澡人人爽久久av| 青娱乐精品在线视频| 欧美精品激情在线| 在线观看黄网址| 国产精品欧美在线观看| 久久影院亚洲| 久久国产精品99国产精| 亚洲精品成人av久久| 精品欧美午夜寂寞影院| 欧美一区二区三区视频免费播放| 国产成人无码av在线播放dvd| 国产蜜臀av在线播放| 国产精品久久免费看| 日本一区二区三不卡| 五月激情六月婷婷| 国产91精品一区二区麻豆亚洲| 国产精品一区专区欧美日韩| 精品人妻一区二区色欲产成人| 国产一区欧美| 欧美成人一二三| 日本一区二区三区网站| 国内精品偷拍| 亚洲18女电影在线观看| 免费看av软件| 九色网友自拍视频手机在线| 不卡视频一二三| 国产精品污www一区二区三区| 欧美一级高潮片| 欧美视频导航| 久久久久成人精品| 国产福利久久久| 亚洲黄色大片| 91av视频在线免费观看| 久久久久久91亚洲精品中文字幕| 国产精品久久久久久模特| 日韩国产高清污视频在线观看| 亚洲少妇一区二区| 视频欧美一区| 亚洲国产精品va在线看黑人动漫 | 深夜福利亚洲| 91精品视频网| 又色又爽又黄18网站| 国产精品xxx在线观看| 亚洲精品国产福利| 素人fc2av清纯18岁| 国产精品自拍区| 波霸ol色综合久久| 欧美极品视频在线观看| 日韩有码av| 亚洲乱码国产乱码精品精天堂| 美女爆乳18禁www久久久久久| 成人精品视频| 久99久在线视频| 91蜜桃视频在线观看| 久久久精品性| 96国产粉嫩美女| 秋霞视频一区二区| 国产日韩欧美电影| 男人天堂成人网| cao在线视频| 欧洲视频一区二区| 免费涩涩18网站入口| 天堂久久av| 亚洲图片欧美日产| www.色小姐com| 亚洲一区日韩| 久久免费少妇高潮久久精品99| 特级西西www444人体聚色| 999精品在线| 性欧美在线看片a免费观看| 波多野结衣午夜| 国产成人综合视频| 欧美午夜精品久久久久久蜜| 黄色网页在线免费观看| 国产亚洲一区二区三区在线观看| 在线综合视频网站| 国产调教在线| 91精品国产综合久久久久久久| 中文乱码人妻一区二区三区视频| 欧美一区2区| 亚州精品天堂中文字幕| 一级二级三级视频| 99综合电影在线视频| 一本—道久久a久久精品蜜桃| 精品三级久久| 欧美一级片在线观看| 美女洗澡无遮挡| 亚洲二区在线| 91午夜在线播放| 成年人视频网站在线| 性久久久久久久久久久久| 天天干天天av| 欧美系列电影免费观看| 97在线免费观看| 国产黄色av网站| 一色桃子久久精品亚洲| 丁香啪啪综合成人亚洲| 久久久久久毛片免费看| 九九热最新视频//这里只有精品 | 国产三级伦理在线| 欧美日韩成人高清| 国产真实乱人偷精品人妻| 影音先锋久久久| 亚洲影院污污.| 老司机午夜在线| 欧美三片在线视频观看| 97伦伦午夜电影理伦片| 亚洲视频大全| 国产一区再线| 手机av在线免费观看| 亚洲人精品一区| 第四色婷婷基地| 精品国产一区二区三区| 日本欧美国产在线| 亚洲第一区av| 久久美女艺术照精彩视频福利播放| 日本黄色片一级片| 伊人久久影院| 久久久久在线观看| 秋霞欧美在线观看| 午夜一区二区三区在线观看| 中文字幕人妻一区二区三区| 在线欧美不卡| 激情伦成人综合小说| 大桥未久在线视频| 日韩av最新在线观看| 国产特黄大片aaaa毛片| 久久久亚洲高清| 亚洲精品日韩精品| 日韩中文视频| 亚洲视频国产视频| 国产一区二区视频网站| 久久久av毛片精品| 中国黄色片免费看| 久久裸体网站| 亚洲999一在线观看www| 自由的xxxx在线视频| 日韩精品一区二区三区蜜臀 | 欧美精品国产白浆久久久久| 午夜精品一区二区三区在线视频| 亚洲欧美一区二区三| 色婷婷精品久久二区二区蜜臂av | 亚洲色欲色欲www| 亚洲一二区在线观看| 国产综合亚洲精品一区二| 国产精品对白一区二区三区 | 久久人人爽人人爽爽久久| 国产熟女一区二区三区四区| 26uuu久久综合| 日本三区在线观看| 91麻豆精品国产91久久久平台| 91丨九色丨国产在线| 国产高清自产拍av在线| 亚洲精品视频免费| 一级二级三级视频| 午夜精品国产更新| 欧美丰满美乳xxⅹ高潮www| 狠狠久久亚洲欧美| 欧美aaaaa喷水| 成人国产一区| 欧美激情a∨在线视频播放| 五月天婷婷在线观看| 欧美在线视频你懂得| 青青草原免费观看| 久久亚洲综合av| 日本不卡一区在线| 亚洲区国产区| 一区二区三区的久久的视频| 国产精品欧美大片| 国产精品免费一区豆花| 欧美寡妇性猛交xxx免费| 国产手机视频精品| 国产乱淫av片免费| 色婷婷综合久色| 麻豆影视在线播放| 国产欧美日韩精品a在线观看| 成人做爰69片免费| 麻豆精品视频在线观看免费| 精品无码国模私拍视频| 日韩精品免费| 久久精品国产综合精品| 999久久久国产999久久久| 欧美又大粗又爽又黄大片视频| 老司机在线视频二区| 亚洲欧美在线一区二区| 丁香花免费高清完整在线播放| 欧美日韩精品系列| 老熟妇仑乱一区二区av| 亚洲大片精品永久免费| 精品人妻一区二区三| 亚洲欧美网站在线观看| 免费看成人午夜电影| **爰片久久毛片| 国产日韩欧美另类| 三上悠亚亚洲一区| 91av在线免费观看| 欧美草逼视频| 久久天天躁狠狠躁老女人| 国产粉嫩一区二区三区在线观看| 亚洲成人动漫在线播放| www.99视频| 亚洲国产精品一区二区久久| 国产精品久久久免费看| 久久精品一二三| 野花社区视频在线观看| 成人激情动漫在线观看| 国产亚洲精品成人a| 国产成人av福利| 国产男女无遮挡猛进猛出| 极品少妇xxxx精品少妇偷拍| 在线观看av网页| 日本不卡中文字幕| 久久久久久三级| 日韩中文字幕区一区有砖一区| 六月激情综合网| 老鸭窝91久久精品色噜噜导演| 欧美日韩二三区| 精品国产一区二区三区| 欧洲高清一区二区| 国产在视频线精品视频www666| 欧美xxxx黑人又粗又长精品| 欧美美乳视频| 欧美日韩国产精品一卡| 天堂久久av| 国产欧美日韩一区二区三区| 91精品麻豆| 999精品在线观看| 国产精品igao视频网网址不卡日韩| 国产精品美女网站| 欧美爱爱视频| 亚洲一区亚洲二区| 97品白浆高清久久久久久| 999视频在线免费观看| 91精品入口| 蜜桃av噜噜一区二区三区| 日韩aaa久久蜜桃av| 欧美日韩亚洲在线| 成人中文视频| 欧美日韩激情四射| 一区二区自拍| 春日野结衣av| 麻豆精品精品国产自在97香蕉| www.久久av.com| 国产乱码精品一区二区三区五月婷| 日韩激情免费视频| 老司机精品视频网站| 超碰在线公开97| 国产成人在线影院 | 在线观看亚洲黄色| 欧美美女网站色| 国产91免费看| 亚洲男人天堂2024| 精产国品自在线www| 欧美激情喷水视频| 第84页国产精品| 91色在线视频| 亚洲国产合集| 亚洲成人动漫在线| 99亚洲视频| 亚洲精品午夜在线观看| 大白屁股一区二区视频| 国产精品密蕾丝袜| 一区二区三区欧美| 中文字幕在线看人| 日韩亚洲欧美中文三级| 日本午夜在线| 欧美成在线观看| 日韩欧美一区二区三区免费观看| 91亚洲精品丁香在线观看| 国产精品免费99久久久| 国内自拍中文字幕| 日韩精品福利网| 北京富婆泄欲对白| 国产精品久久久久久久岛一牛影视 | 亚洲综合色在线观看| 成人一区二区三区视频| 黄色av免费播放| 天天操天天综合网| 欧美黑人一级片| 欧洲另类一二三四区| 韩国中文字幕hd久久精品| 中文字幕亚洲欧美在线| 天堂中文av在线资源库| 亚洲aⅴ男人的天堂在线观看 | 国产福利拍拍拍| 欧美一区二视频| 成人免费高清在线播放| 欧美一乱一性一交一视频| 日韩精品一级| 中文字幕中文字幕99| 三级成人在线视频| 在线 丝袜 欧美 日韩 制服| 亚洲一区二区在线观看视频| 一区二区 亚洲| 永久免费看mv网站入口亚洲| 欧美a级在线观看| 国产精品9999久久久久仙踪林| 91精品国产乱码久久久久久| 成人在线观看黄| 91在线观看高清| 日韩精品在线不卡| 精品粉嫩超白一线天av| 人人妻人人澡人人爽久久av| 久久国产加勒比精品无码| 色综合久久久| 亚洲一卡二卡三卡| 奇米一区二区三区av| 欧美成人国产精品一区二区| 色av综合在线| 国产又爽又黄免费软件| 伊人久久男人天堂| 日韩欧美少妇| 清纯唯美一区二区三区| 米奇777在线欧美播放| 91网站免费视频| 一本一道久久a久久精品| 欧美亚洲日本| 国产99视频精品免视看7| 杨幂一区二区三区免费看视频| 欧美 日韩 亚洲 一区| 99久久99久久精品免费观看 | 亚洲自拍偷拍色片视频| 久久久久国产精品| 午夜激情影院在线观看| 亚洲人成在线播放网站岛国 | 国产成人精品1024| 久草福利资源在线观看| 精品99999| 深夜在线视频| 区一区二区三区中文字幕| 日本不卡的三区四区五区| 亚洲精品天堂网| 4438x成人网最大色成网站| 亚洲男同gay网站| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 亚洲国产精品网站| 桃色av一区二区| 日韩区国产区| 国产一区二区不卡老阿姨| 欧美一区二区三区成人精品| 一本色道亚洲精品aⅴ| 91短视频版在线观看www免费| 91精品国产自产在线观看永久| 91精品一区二区三区综合| www.四虎精品| 色综合天天综合网国产成人综合天| 91ph在线| 99久久精品免费看国产四区| 亚洲少妇在线| 久久久久麻豆v国产| 日韩你懂的在线观看| 黄视频免费在线看| 亚洲国产欧美不卡在线观看| 国产在线播放一区三区四| 日韩黄色在线视频| 国产一区二区三区在线观看网站 | 久草免费在线色站| 美女被啪啪一区二区| 久久国产精品色| 日韩女同强女同hd| 日韩中文视频免费在线观看| 国产精品对白久久久久粗| 免费看a级黄色片| 99久久婷婷国产| 中文字幕视频一区二区| 亚洲精品自拍偷拍| 亚洲国产综合在线观看| 国产午夜大地久久| 亚洲欧洲在线观看av| 视频污在线观看| 91香蕉嫩草影院入口| 久久久久久久高潮|