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

JavaScript 如何在線解壓 ZIP 文件?

開發 前端
相信大家對 ZIP 文件都不會陌生,當你要打開本地的 ZIP 文件時,你就需要先安裝支持解壓 ZIP 文件的解壓軟件。但如果預解壓的 ZIP 文件在服務器上,我們應該如何處理呢?

[[397962]]

本文轉載自微信公眾號「全棧修仙之路」,作者阿寶哥。轉載本文請聯系全棧修仙之路公眾號。   

相信大家對 ZIP 文件都不會陌生,當你要打開本地的 ZIP 文件時,你就需要先安裝支持解壓 ZIP 文件的解壓軟件。但如果預解壓的 ZIP 文件在服務器上,我們應該如何處理呢?

最簡單的一種方案就是把文件下載到本地,然后使用支持 ZIP 格式的解壓軟件進行解壓。那么能不能在線解壓 ZIP 文件呢?答案是可以的,接下來阿寶哥將介紹瀏覽器解壓和服務器解壓兩種在線解壓 ZIP 文件的方案。

在介紹在線解壓 ZIP 文件的兩種方案前,我們先來簡單了解一下 ZIP 文件格式。

一、ZIP 格式簡介

ZIP 文件格式是一種數據壓縮和文檔儲存的文件格式,原名 Deflate,發明者為菲爾·卡茨(Phil Katz),他于 1989 年 1 月公布了該格式的資料。ZIP 通常使用后綴名 “.zip”,它的 MIME 格式為 “application/zip”。目前,ZIP 格式屬于幾種主流的壓縮格式之一,其競爭者包括RAR 格式以及開放源碼的 7z 格式。

ZIP 是一種相當簡單的分別壓縮每個文件的存檔格式,分別壓縮文件允許不必讀取另外的數據而檢索獨立的文件。理論上,這種格式允許對不同的文件使用不同的算法。然而,在實際上,ZIP 大多數都是在使用卡茨(Katz)的 DEFLATE 算法。

簡單介紹完 ZIP 格式,接下來阿寶哥先來介紹基于 JSZip 這個庫的瀏覽器解壓方案。

二、瀏覽器解壓方案

JSZip 是一個用于創建、讀取和編輯 .zip 文件的 JavaScript 庫,該庫支持大多數瀏覽器,具體的兼容性如下圖所示:

其實有了 JSZip 這個庫的幫助,要實現瀏覽器端在線解壓 ZIP 文件的功能并不難。因為官方已經為我們提供了 解壓本地文件、解壓遠程文件和生成 ZIP 文件 的完整示例。好的,廢話不多說,下面我們來一步步實現在線解壓 ZIP 文件的功能。

2.1 定義工具類

瀏覽器端在線解壓 ZIP 文件的功能,可以拆分為 下載 ZIP 文件、解析 ZIP 文件和展示 ZIP 文件 3 個小功能??紤]到功能復用性,阿寶哥把下載 ZIP 文件和解析 ZIP 文件的邏輯封裝在 ExeJSZip 類中:

  1. class ExeJSZip { 
  2.   // 用于獲取url地址對應的文件內容 
  3.   getBinaryContent(url, progressFn = () => {}) { 
  4.     return new Promise((resolve, reject) => { 
  5.       if (typeof url !== "string" || !/https?:/.test(url)) 
  6.         reject(new Error("url 參數不合法")); 
  7.       JSZipUtils.getBinaryContent(url, { // JSZipUtils來自于jszip-utils這個庫 
  8.         progress: progressFn, 
  9.         callback: (err, data) => { 
  10.           if (err) { 
  11.             reject(err); 
  12.           } else { 
  13.             resolve(data); 
  14.           } 
  15.         }, 
  16.       }); 
  17.     }); 
  18.   } 
  19.    
  20.   // 遍歷Zip文件 
  21.   async iterateZipFile(data, iterationFn) { 
  22.     if (typeof iterationFn !== "function") { 
  23.       throw new Error("iterationFn 不是函數類型"); 
  24.     } 
  25.     let zip; 
  26.     try { 
  27.       zip = await JSZip.loadAsync(data); // JSZip來自于jszip這個庫 
  28.       zip.forEach(iterationFn); 
  29.       return zip; 
  30.     } catch (error) { 
  31.       throw new error(); 
  32.     } 
  33.   } 

2.2 在線解壓 ZIP 文件

利用 ExeJSZip 類的實例,我們就可以很容易實現在線解壓 ZIP 文件的功能:

html 代碼

  1. <p> 
  2.   <label>請輸入ZIP文件的線上地址:</label> 
  3.   <input type="text" id="zipUrl" /> 
  4. </p> 
  5. <button id="unzipBtn" onclick="unzipOnline()">在線解壓</button> 
  6. <p id="status"></p> 
  7. <ul id="fileList"></ul> 

JS 代碼

  1. const zipUrlEle = document.querySelector("#zipUrl"); 
  2. const statusEle = document.querySelector("#status"); 
  3. const fileList = document.querySelector("#fileList"); 
  4. const exeJSZip = new ExeJSZip(); 
  5.  
  6. // 執行在線解壓操作 
  7. async function unzipOnline() { 
  8.   fileList.innerHTML = ""
  9.   statusEle.innerText = "開始下載文件..."
  10.   const data = await exeJSZip.getBinaryContent( 
  11.     zipUrlEle.value, 
  12.     handleProgress 
  13.   ); 
  14.   let items = ""
  15.   await exeJSZip.iterateZipFile(data, (relativePath, zipEntry) => { 
  16.     items += `<li class=${zipEntry.dir ? "caret" : "indent"}> 
  17.       ${zipEntry.name}</li>`; 
  18.   }); 
  19.   statusEle.innerText = "ZIP文件解壓成功"
  20.   fileList.innerHTML = items; 
  21.  
  22. // 處理下載進度 
  23. function handleProgress(progressData) { 
  24.   const { percent, loaded, total } = progressData; 
  25.   if (loaded === total) { 
  26.     statusEle.innerText = "文件已下載,努力解壓中"
  27.   } 

好了,在瀏覽器端如何通過 JSZip 這個庫來實現在線解壓 ZIP 文件的功能已經介紹完了,我們來看一下以上示例的運行結果:

現在我們已經可以在線解壓 ZIP 文件了,這時有的小伙伴可能會問,能否預覽解壓后的文件呢?答案是可以的,因為 JSZip 這個庫為我們提供了 file API,通過這個 API 我們就可以讀取指定文件中的內容。比如這樣使用 zip.file("amount.txt").async("arraybuffer") ,之后我們就可以執行對應的操作來實現文件預覽的功能。

需要注意的是,基于 JSZip 的方案并不是完美的,它存在一些限制。比如它不支持解壓加密的 ZIP 文件,當解壓較大的文件時,在 IE 10 以下的瀏覽器可能會出現閃退問題。此外,它還有一些其它的限制,這里阿寶哥就不詳細說明了。感興趣的小伙伴,可以閱讀 Limitations of JSZip 文章中的相關內容。

既然瀏覽器解壓方案存在一些弊端,特別是在線解壓大文件的情形,要解決該問題,我們可以考慮使用服務器解壓方案。

三、服務器解壓方案

服務器解壓方案就是允許用戶通過文件 ID 或文件名進行在線解壓,接下來阿寶哥將基于 koa 和 node-stream-zip 這兩個庫來介紹如何實現服務器在線解壓 ZIP 文件的功能。如果你對 koa 還不了解的話,建議你先大致閱讀一下 koa 的官方文檔。

  1. const path = require("path"); 
  2. const Koa = require("koa"); 
  3. const cors = require("@koa/cors"); 
  4. const Router = require("@koa/router"); 
  5. const StreamZip = require("node-stream-zip"); 
  6.  
  7. const app = new Koa(); 
  8. const router = new Router(); 
  9. const ZIP_HOME = path.join(__dirname, "zip"); // ZIP文件的根目錄 
  10. const UnzipCaches = new Map(); // 保存已解壓的文件信息 
  11.  
  12. router.get("/", async (ctx) => { 
  13.   ctx.body = "服務端在線解壓ZIP文件示例(阿寶哥)"
  14. }); 
  15.  
  16. // 注冊中間件 
  17. app.use(cors()); 
  18. app.use(router.routes()).use(router.allowedMethods()); 
  19.  
  20. app.listen(3000, () => { 
  21.   console.log("app starting at port 3000"); 
  22. }); 

在以上代碼中,我們使用了 @koa/cors 和 @koa/router 兩個中間件并創建了一個簡單的 Koa 應用程序?;谏鲜龅拇a,我們來注冊一個用于處理在線解壓指定文件名的路由。

3.1 根據文件名解壓指定 ZIP 文件

app.js

  1. router.get("/unzip/:name", async (ctx) => { 
  2.   const fileName = ctx.params.name
  3.   let filteredEntries; 
  4.   try { 
  5.     if (UnzipCaches.has(fileName)) { // 優先從緩存中獲取 
  6.       filteredEntries = UnzipCaches.get(fileName); 
  7.     } else { 
  8.       const zip = new StreamZip.async({ file: path.join(ZIP_HOME, fileName) }); 
  9.       const entries = await zip.entries(); 
  10.       filteredEntries = Object.values(entries).map((entry) => { 
  11.         return { 
  12.           name: entry.name
  13.           size: entry.size
  14.           dir: entry.isDirectory, 
  15.         }; 
  16.       }); 
  17.       await zip.close(); 
  18.       UnzipCaches.set(fileName, filteredEntries); 
  19.     } 
  20.     ctx.body = { 
  21.       status: "success"
  22.       entries: filteredEntries, 
  23.     }; 
  24.   } catch (error) { 
  25.     ctx.body = { 
  26.       status: "error"
  27.       msg: `在線解壓${fileName}文件失敗`, 
  28.     }; 
  29.   } 
  30. }); 

在以上代碼中,我們通過 ZIP_HOME 和 fileName 獲得文件的最終路徑,然后使用 StreamZip 對象來執行解壓操作。為了避免重復執行解壓操作,阿寶哥定義了一個 UnzipCaches 緩存對象,用來保存已解壓的文件信息。定義好上述路由,下面我們來驗證一下對應的功能。

3.2 在線解壓 ZIP 文件

html 代碼

  1. <p> 
  2.   <label>請輸入ZIP文件名:</label> 
  3.   <input type="text" id="fileName" value="kl_161828427993677" /> 
  4. </p> 
  5. <button id="unzipBtn" onclick="unzipOnline()">在線解壓</button> 
  6. <p id="status"></p> 
  7. <ul id="fileList"></ul> 

JS 代碼

  1. const fileList = document.querySelector("#fileList"); 
  2. const fileNameEle = document.querySelector("#fileName"); 
  3.  
  4. const request = axios.create({ 
  5.   baseURL: "http://localhost:3000/"
  6.   timeout: 10000, 
  7. }); 
  8.  
  9. async function unzipOnline() { 
  10.   const fileName = fileNameEle.value; 
  11.   if(!fileName) return
  12.   const response = await request.get(`unzip/${fileName}`); 
  13.   if (response.data && response.data.status === "success") { 
  14.     const entries = response.data.entries; 
  15.     let items = ""
  16.     entries.forEach((zipEntry) => { 
  17.       items += `<li class=${zipEntry.dir ? "caret" : "indent"}>${ 
  18.         zipEntry.name 
  19.       }</li>`; 
  20.     }); 
  21.     fileList.innerHTML = items; 
  22.   } 

以上示例成功運行后的結果如下圖所示:

現在我們已經實現根據文件名解壓指定 ZIP 文件,那么我們可以預覽壓縮文件中指定路徑的文件么?答案也是可以的,利用 zip 對象提供的 entryData(entry: string | ZipEntry): Promise 方法就可以讀取指定路徑下文件的內容。

3.3 預覽 ZIP 文件中指定路徑的文件

app.js

  1. router.get("/unzip/:name/entry", async (ctx) => { 
  2.   const fileName = ctx.params.name; // ZIP壓縮文件名 
  3.   const entryPath = ctx.query.path; // 文件的路徑 
  4.   try { 
  5.     const zip = new StreamZip.async({ file: path.join(ZIP_HOME, fileName) }); 
  6.     const entryData = await zip.entryData(entryPath); 
  7.     await zip.close(); 
  8.     ctx.body = { 
  9.       status: "success"
  10.       entryData: entryData, 
  11.     }; 
  12.   } catch (error) { 
  13.     ctx.body = { 
  14.       status: "error"
  15.       msg: `讀取${fileName}中${entryPath}文件失敗`, 
  16.     }; 
  17.   } 
  18. }); 

在以上代碼中,我們通過 zip.entryData 方法來讀取指定路徑的文件內容,它返回的是一個 Buffer 對象。當前端接收到該數據時,還需要把接收到的 Buffer 對象轉換為 ArrayBuffer 對象,對應的處理方式如下所示:

  1. function toArrayBuffer(buf) { 
  2.   let ab = new ArrayBuffer(buf.length); 
  3.   let view = new Uint8Array(ab); 
  4.   for (let i = 0; i < buf.length; ++i) { 
  5.     view[i] = buf[i]; 
  6.   } 
  7.   return ab; 

定義完 toArrayBuffer 函數之后,我們就可以通過調用 app.js 定義的 API 來實現預覽功能,具體的代碼如下所示:

  1. async function previewZipFile(path) { 
  2.   const fileName = fileNameEle.value; // 獲取文件名 
  3.   const response = await request.get( 
  4.     `unzip/${fileName}/entry?path=${path}` 
  5.   ); 
  6.   if (response.data && response.data.status === "success") { 
  7.     const { entryData } = response.data; 
  8.     const entryBuffer = toArrayBuffer(entryData.data); 
  9.     const blob = new Blob([entryBuffer]); 
  10.     // 使用URL.createObjectURL或blob.text()讀取文件信息 
  11.   } 

由于完整的示例代碼內容比較多,阿寶哥就不放具體的代碼了。感興趣的小伙伴,可以訪問以下地址瀏覽示例代碼。

https://gist.github.com/semlinker/3bb9634f4e4ec7b6ab4008a688583115

注意:以上代碼僅供參考,請根據實際業務進行調整。

四、總結

本文阿寶哥介紹了在線解壓 ZIP 文件的兩種方案,在實際項目中,建議使用服務器解壓的方案。這樣不僅可以解決瀏覽器的兼容性問題,而且也可以解決大文件在線解壓的問題,同時也方便后期擴展支持其它的壓縮格式。

五、參考資源

維基百科 ZIP 格式

Limitations of JSZip

 

責任編輯:武曉燕 來源: 全棧修仙之路
相關推薦

2019-10-17 17:15:01

Linux解壓文件命令

2015-04-08 15:40:53

php在線解壓解壓zip文件

2021-12-10 15:22:26

Go Zip 文件

2022-09-26 08:35:53

磁盤Java解密

2018-02-28 13:20:40

Python解壓zip

2019-04-26 09:50:21

Linux壓縮文件文件夾

2018-09-14 16:18:26

Linux壓縮文件應用程序

2011-08-15 14:07:53

Objective-C解壓縮ZIP文件

2020-09-09 14:30:24

2012-05-10 09:43:28

2024-10-22 15:10:49

2022-01-21 10:58:39

JavaScriptGolangPython

2021-03-11 23:43:20

JavaScript數組開發

2021-03-18 10:45:02

JavaScript數組運算符

2020-12-13 17:57:16

加密密碼Python

2016-11-17 22:02:13

Linux壓縮及解壓縮

2020-12-08 08:07:41

JavaScript中等分數組

2011-03-21 12:41:41

JavaScript

2011-12-30 11:14:41

Javazip

2021-08-10 11:09:06

Linux壓縮神器命令
點贊
收藏

51CTO技術棧公眾號

国产一级一级片| 一级黄色免费毛片| 九色视频在线播放| 蜜桃av一区二区在线观看| 久久综合久中文字幕青草| 三上悠亚 电影| 中文字幕在线中文字幕在线中三区| 久久久亚洲精品石原莉奈 | 中文字幕黄色网址| 免费看日产一区二区三区| 婷婷六月综合亚洲| 中文字幕制服丝袜在线| 午夜福利视频一区二区| 久久综合综合久久综合| 97视频com| www日韩在线| 曰本一区二区三区视频| 日韩一区二区不卡| 中文字幕欧美人妻精品一区| 高清免费电影在线观看| 久久这里只有精品视频网| 91夜夜未满十八勿入爽爽影院| 久久久午夜影院| 欧美在线黄色| 色偷偷偷综合中文字幕;dd| 亚洲婷婷在线观看| 国产日韩一区二区三免费高清| 欧美视频在线看| 精品国产一区二区三区无码| 亚洲精品承认| 国产亚洲1区2区3区| 国产亚洲一区在线播放| 国产欧美综合视频| 久久99国产精品麻豆| 国产精品91免费在线| 国产第100页| 欧美国产高清| 久久九九热免费视频| 欧美黄色高清视频| 亚洲欧洲色图| 精品网站999www| www.com日本| 少妇精品在线| 日韩亚洲欧美在线观看| 日本国产一级片| 视频精品导航| 欧美日韩一区 二区 三区 久久精品| 乱妇乱女熟妇熟女网站| japanese色国产在线看视频| 一区二区三区国产精品| 黄色免费高清视频| 伊人影院在线视频| 亚洲欧美日韩国产综合| 日韩视频在线免费播放| 91福利在线视频| 国产精品久久久久桃色tv| 亚洲 国产 日韩 综合一区| 免费黄网站在线观看| 久久夜色精品一区| 欧美日韩国产不卡在线看| 日本一区高清| 久久久久九九视频| 亚洲国产一区二区三区在线播| 成年人在线免费观看| 国产精品无遮挡| 亚洲永久激情精品| 在线观看h网| 一区二区免费视频| 大陆av在线播放| 色在线中文字幕| 色婷婷综合激情| 91淫黄看大片| 精品美女一区| 日韩一区二区三区av| wwwxx日本| 色橹橹欧美在线观看视频高清| 亚洲精品一区二区三区婷婷月| 韩国三级hd中文字幕| 欧美高清视频手机在在线| 久久成人精品一区二区三区| 精品无码人妻一区二区三| 一本色道久久精品| 日韩免费av在线| 一区二区三区日| 懂色av一区二区夜夜嗨| 久热这里只精品99re8久| 国产高清在线看| 亚洲天堂中文字幕| 国产日韩欧美精品在线观看| 北岛玲heyzo一区二区| 精品污污网站免费看| 久久久国产精品久久久| 亚洲国产合集| 久久av红桃一区二区小说| 日本熟伦人妇xxxx| 日韩—二三区免费观看av| 91青草视频久久| 亚洲三级中文字幕| 综合中文字幕亚洲| 久久久久久久久久久久久国产精品| 亚洲日本视频在线观看| 香蕉视频成人在线观看| 国产精品入口夜色视频大尺度| 国产免费不卡av| 91丨porny丨在线| 在线精品日韩| 韩国成人二区| 91精品福利在线一区二区三区| 少妇户外露出[11p]| 色综合天天爱| 7m精品福利视频导航| 国产又粗又猛又黄又爽| 久久综合色天天久久综合图片| 992tv快乐视频| 国产一区二区三区朝在线观看| 日韩视频中午一区| 色欲AV无码精品一区二区久久| 国产精品九九| 国产精品自产拍在线观| 在线观看xxx| 亚洲精品美国一| 色片在线免费观看| 九九视频精品全部免费播放| 欧美高清激情视频| 亚洲综合精品国产一区二区三区| 成人精品电影在线观看| 裸体裸乳免费看| 草民电影神马电影一区二区| 日韩精品免费在线播放| 欧美精品久久久久性色| 国产麻豆精品在线观看| 五月天亚洲综合情| 日本高清不卡一区二区三区视频| 精品电影一区二区三区| 538精品在线视频| 久久精品久久99精品久久| 欧美日韩在线精品| 日韩激情电影| 亚洲精品乱码久久久久久按摩观| 久久亚洲AV无码| 国产在线视视频有精品| 最新不卡av| 国产精品久久久久77777丨| 亚洲图片欧洲图片av| 国产一区免费看| 久久精品欧美一区二区三区不卡 | 91成人免费在线| 中文字幕一区二区人妻在线不卡| 在线日韩电影| 国产乱人伦精品一区二区| 天堂av在线电影| 欧美mv日韩mv| 国产香蕉在线视频| 99精品热视频| 国产午夜福利视频在线观看| 亚洲三级性片| 国产精品久久久久一区二区| 91ph在线| 日韩欧美国产小视频| 国产亚洲精品码| 91在线云播放| 国产精品无码专区av在线播放 | 国产一区三区三区| 精品日韩在线播放| 涩爱av色老久久精品偷偷鲁| 欧美精品电影在线| 同心难改在线观看| 欧美性xxxxx极品少妇| 韩国一级黄色录像| 国产精品亚洲第一| 日韩欧美一区二| 欧美军人男男激情gay| 国产日韩欧美在线视频观看| 久久日韩视频| 欧美精品一区二区久久婷婷| 91美女免费看| 国产精品二区一区二区aⅴ污介绍| 日韩va在线观看| 狠狠入ady亚洲精品经典电影| 久久国产精品99久久久久久丝袜| 精品3atv在线视频| 久久久精品视频成人| 欧美特级特黄aaaaaa在线看| 欧美午夜激情在线| 亚洲欧美综合7777色婷婷| 国产一区久久久| 97国产精东麻豆人妻电影| 成人亚洲一区| 国产91视觉| 日本一区二区三区视频在线| 久久亚洲精品网站| 色视频免费在线观看| 欧美日韩一级片在线观看| 福利所第一导航| 久久精品人人爽人人爽| 少妇献身老头系列| 奇米888四色在线精品| 路边理发店露脸熟妇泻火| 香蕉久久精品| 亚洲a在线播放| 桃花岛tv亚洲品质| 欧美日韩国产va另类| 国产日产精品久久久久久婷婷| 欧美大片在线观看| 丰满人妻一区二区三区四区| 亚洲一区视频在线观看视频| jizz日本在线播放| 91亚洲精品乱码久久久久久蜜桃| 一个色综合久久| 免费精品视频| 国产一区二区四区| 婷婷久久综合| 日韩精品久久一区| 日韩美女国产精品| 99国内精品久久久久久久软件| 欧洲一级精品| 91高清视频免费| 男人天堂亚洲| 成年人精品视频| av电影在线观看| 日韩精品中文字幕有码专区| 亚洲xxx在线| 在线成人小视频| 亚洲精品91天天久久人人| 天涯成人国产亚洲精品一区av| 91久久国产综合| 中文字幕不卡一区| 日韩人妻无码精品综合区| 成人午夜av电影| 丰满少妇一区二区三区专区| 免费不卡在线观看| 激情视频综合网| 男女精品网站| 久久美女福利视频| 亚洲精品乱码| 成人免费视频91| 亚洲性感美女99在线| 亚洲一区 在线播放| 一区二区三区在线电影| 中文字幕日韩一区二区三区| 日韩电影二区| 亚洲在线播放电影| 欧美gayvideo| 一区二区三区免费看| 欧美激情电影| 亚洲欧美日韩不卡| 欧美日韩国产精品一区二区亚洲| 警花观音坐莲激情销魂小说| 91tv精品福利国产在线观看| 在线观看国产一区| 亚州av乱码久久精品蜜桃| 亚洲黄色网址在线观看| 欧美成人tv| avav在线播放| 国产欧美一级| www日韩在线观看| 免费在线视频一区| 五月婷婷六月合| 激情欧美一区二区三区在线观看| 污污视频网站在线| 国产成人亚洲综合a∨婷婷| 久久av一区二区三| 91性感美女视频| 亚洲理论片在线观看| 中文字幕精品三区| 永久免费看mv网站入口| 亚洲蜜桃精久久久久久久| 精品无码久久久久久久久| 精品久久久久久国产| 久久精品五月天| 欧美福利一区二区| 日本免费一区视频| 亚洲欧美日韩另类| 日本视频在线观看| 精品中文字幕在线观看| 国产蜜臀在线| 国产91色在线|| 亚洲精品成a人ⅴ香蕉片| 国产精品v欧美精品v日韩| 亚瑟一区二区三区四区| 亚洲精品一区二区三区av| 中文精品久久| 黄色动漫网站入口| 蓝色福利精品导航| 午夜影院福利社| 国产欧美精品一区| 日本天堂中文字幕| 色婷婷久久99综合精品jk白丝| 国产老妇伦国产熟女老妇视频| 精品国产91亚洲一区二区三区婷婷| 欧美大片aaa| 久久国产精品电影| 成人性生活视频| 91最新国产视频| 国产成人影院| 轻点好疼好大好爽视频| 七七婷婷婷婷精品国产| caopor在线| 亚洲欧洲韩国日本视频| 日韩三级免费看| 91精品国产综合久久久久久久久久| 日本成人动漫在线观看| 自拍偷拍亚洲在线| 91福利在线免费| 成人午夜在线观看| 欧美最新另类人妖| 九九爱精品视频| 精品一区二区三区不卡| 少妇久久久久久久久久| 亚洲成人高清在线| 国产尤物在线观看| 亚洲夜晚福利在线观看| 嗯啊主人调教在线播放视频| 国产精品一区二区久久| 欧美一级全黄| 久久艹国产精品| 国产在线播放一区| 日韩黄色中文字幕| 一道本成人在线| 黑人精品一区二区| 欧美成人午夜视频| 日本国产一区| 水蜜桃亚洲一二三四在线| 一区二区三区成人精品| 女教师高潮黄又色视频| 国产精品卡一卡二| 青青草视频在线观看免费| 日韩av在线免费播放| 欧美性受ⅹ╳╳╳黑人a性爽| 成人做爽爽免费视频| 日韩欧美网址| 高清一区在线观看| 久久久五月婷婷| 毛片在线免费视频| 亚洲激情 国产| aa国产成人| 成人欧美一区二区三区在线观看 | 99精品热视频| 五月天综合在线| 精品久久久久久久久久久院品网| a视频在线播放| 91情侣偷在线精品国产| 亚洲字幕久久| 下面一进一出好爽视频| 亚洲三级理论片| www.色视频| 欧美激情综合亚洲一二区| 亚洲国产aⅴ精品一区二区| 99视频精品全部免费看| 国内久久精品视频| 青娱乐在线视频免费观看| 日韩色视频在线观看| 91精品久久久| 99热在线播放| 亚洲国产国产亚洲一二三| 亚洲久久久久久| 日韩欧美高清在线视频| 黄色影院在线播放| 国产精品久久久久久搜索| 日韩精品四区| 老女人性生活视频| 亚洲国产cao| 欧美日韩在线中文字幕| 国产精品久久久久久久久借妻| 久久精品国产www456c0m| 涩多多在线观看| 亚洲国产中文字幕在线视频综合| 五月天激情婷婷| 国产精品中文字幕在线| 在线国产一区| 日本五十肥熟交尾| 欧美性猛交xxxx乱大交| 国产精品免费观看| 91亚洲精品一区| 99国内精品| 在线观看免费黄色网址| 欧美一区二区三区在线电影| av资源网在线播放| 日韩中文字幕一区| 国产在线视频不卡二| 国产乡下妇女做爰毛片| 亚洲午夜激情免费视频| 国产精品国产三级在线观看| 大荫蒂性生交片| 国产亚洲欧美日韩在线一区| 国产精品一区二区av白丝下载| 国内外成人免费激情在线视频| 国产亚洲欧美日韩在线观看一区二区| 五月天av在线播放| 午夜伦理一区二区| aaa日本高清在线播放免费观看| 91久久国产自产拍夜夜嗨| 亚洲免费综合| 希岛爱理中文字幕| 亚洲精品视频免费在线观看| www999久久| 美女福利视频在线| 一区二区三区在线视频播放| 国产三级在线免费观看| av蓝导航精品导航|