黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

瀏覽:23日期:2022-10-05 08:50:08
1. 前言

之前公司要在管理系統中做一個全局上傳插件,即切換各個頁面的時候,上傳界面還在并且上傳不會受到影響,這在vue這種spa框架面前并不是什么難題。然而后端大佬說我們要實現分片上傳、秒傳以及斷點續傳的功能,聽起來頭都大了。

很久之前我寫了一篇webuploader的文章,結果使用起來發現問題很多,且官方團隊不再維護這個插件了, 經過多天調研及踩雷,最終決定基于vue-simple-uploader插件實現該功能,在項目中使用起來無痛且穩定。

如果你只是想實現基本的(非定制化的)上傳功能,直接使用vue-simple-uploader,多讀一下它的文檔,不需要更多的二次封裝。如果你只是想實現全局上傳插件,也可以參照一下我的實現。如果你用到了分片上傳、秒傳及斷點續傳這些復雜的功能,恭喜你,這篇文章的重點就在于此。

本文源碼在此:https://github.com/shady-xia/Blog/tree/master/vue-simple-uploader

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

2. 關于vue-simple-uploader

vue-simple-uploader是基于 simple-uploader.js 封裝的vue上傳插件。它的優點包括且不限于以下幾種:

支持文件、多文件、文件夾上傳;支持拖拽文件、文件夾上傳 可暫停、繼續上傳 錯誤處理 支持“秒傳”,通過文件判斷服務端是否已存在從而實現“秒傳” 分塊上傳 支持進度、預估剩余時間、出錯自動重試、重傳等操作

讀這篇文章之前,建議先讀一遍simple-uploader.js的文檔,然后再讀一下vue-simple-uploader的文檔,了解一下各個參數的作用是什么,我在這里假定大家已經比較熟悉了。。vue-simple-uploader文檔

simple-uploader.js文檔

安裝:npm install vue-simple-uploader --save使用:在main.js中:

import uploader from ’vue-simple-uploader’Vue.use(uploader)3. 基于vue-simple-uploader封裝全局上傳組件

引入vue-simple-uploader后,我們開始封裝全局的上傳組件globalUploader.vue,代碼比較長,就不整個放出來了,源碼放到github上了,這里一步一步地講解。

template部分如下,本人自定義了模板和樣式,所以html部分比較長,css部分暫時不列出,大家可以根據自己的ui去更改,主要關注一下uploader這個組件的options參數及文件added、success、progress、error幾個事件:

<template> <div id='global-uploader'> <!-- 上傳 --> <uploader ref='uploader' :options='options' :autoStart='false' @file-added='onFileAdded' @file-success='onFileSuccess' @file-progress='onFileProgress' @file-error='onFileError' class='uploader-app'> <uploader-unsupport></uploader-unsupport> <uploader-btn :attrs='attrs' ref='uploadBtn'>選擇文件</uploader-btn> <uploader-list v-show='panelShow'> <div slot-scope='props' :class='{’collapse’: collapse}'> <div class='file-title'> <h2>文件列表</h2> <div class='operate'> <el-button @click='fileListShow' type='text' :title='collapse ? ’展開’:’折疊’ '> <i :class='collapse ? ’icon-fullscreen’: ’icon-minus-round’'></i> </el-button> <el-button @click='close' type='text'> <i class='iconfont icon-close'></i> </el-button> </div> </div> <ul class='file-list'> <li v-for='file in props.fileList' :key='file.id'> <uploader-file : ref='files' :file='file' :list='true'></uploader-file> </li> <div v-if='!props.fileList.length'><i class='nucfont inuc-empty-file'></i> 暫無待上傳文件</div> </ul> </div> </uploader-list> </uploader> </div></template>

組件中的data部分:

data() { return { options: { target: ’http://xxxxx/xx’, // 目標上傳 URL chunkSize: ’2048000’, //分塊大小 fileParameterName: ’file’, //上傳文件時文件的參數名,默認file maxChunkRetries: 3, //最大自動失敗重試上傳次數 testChunks: true, //是否開啟服務器分片校驗 // 服務器分片校驗函數,秒傳及斷點續傳基礎 checkChunkUploadedByResponse: function (chunk, message) { let objMessage = JSON.parse(message); if (objMessage.skipUpload) { return true; } return (objMessage.uploaded || []).indexOf(chunk.offset + 1) >= 0 }, headers: { // 在header中添加的驗證,請根據實際業務來 Authorization: 'Bearer ' + Ticket.get().access_token }, }, attrs: { // 接受的文件類型,形如[’.png’, ’.jpg’, ’.jpeg’, ’.gif’, ’.bmp’...] 這里我封裝了一下 accept: ACCEPT_CONFIG.getAll() }, panelShow: false, //選擇文件后,展示上傳panel }},

全局引用:在app.vue中引用,即作為全局的組件一直存在,只不過在不使用的時候把上傳界面隱藏了

<global-uploader></global-uploader>4. 文件上傳流程概覽

1. 點擊按鈕,觸發文件上傳操作:

(如果你做的不是全局上傳的功能,而是直接點擊上傳,忽略這一步。)

因為我做的是全局上傳的插件,要先把上傳的窗口隱藏起來,在點擊某個上傳按鈕的時候,用Bus發送一個openUploader的事件,在globalUploader.vue中接收該事件,trigger我們uploader-btn的click事件。

在某個頁面中,點擊上傳按鈕,同時把要給后臺的參數帶過來(如果有的話),這里組件之間傳值我用的event bus,當然用vuex會更好:

Bus.$emit(’openUploader’, { superiorID: this.superiorID})

在globalUploader.vue中接收該事件:

Bus.$on(’openUploader’, query => { this.params = query || {}; if (this.$refs.uploadBtn) { // 這樣就打開了選擇文件的操作窗口 $(’#global-uploader-btn’).click(); }});

2. 選擇文件后,將上傳的窗口展示出來,開始md5的計算工作

onFileAdded(file) { this.panelShow = true;// 計算MD5,下文會提到 this.computeMD5(file);},

這里有個前提,我在uploader中將autoStart設為了false,為什么要這么做?

在選擇文件之后,我要計算MD5,以此來實現斷點續傳及秒傳的功能,所以選擇文件后直接開始上傳肯定不行,要等MD5計算完畢之后,再開始文件上傳的操作。

具體的MD5計算方法,會在下面講,這里先簡單引出。

上傳過程中,會不斷觸發file-progress上傳進度的回調

// 文件進度的回調onFileProgress(rootFile, file, chunk) { console.log(`上傳中 ${file.name},chunk:${chunk.startByte / 1024 / 1024} ~ ${chunk.endByte / 1024 / 1024}`)},3. 文件上傳成功后

文件上傳成功后,在“上傳完成”的回調中,通過服務端返回的needMerge字段,來判斷是否需要再發送合并分片的請求,如果這個字段為true,則需要給后臺發一個請求合并的ajax請求,否則直接上傳成功。

注意:這里的needMerge是我和后臺商議決定的字段名

onFileSuccess(rootFile, file, response, chunk) { let res = JSON.parse(response); // 服務器自定義的錯誤,這種錯誤是Uploader無法攔截的 if (!res.result) { this.$message({ message: res.message, type: ’error’ }); return }// 如果服務端返回需要合并 if (res.needMerge) { api.mergeSimpleUpload({ tempName: res.tempName, fileName: file.name, ...this.params, }).then(data => { // 文件合并成功 Bus.$emit(’fileSuccess’, data); }).catch(e => {}); // 不需要合并 } else { Bus.$emit(’fileSuccess’, res); console.log(’上傳成功’); }},onFileError(rootFile, file, response, chunk) {console.log(error)},5. 文件分片

vue-simple-uploader自動將文件進行分片,在options的chunkSize中可以設置每個分片的大小。

如圖:對于大文件來說,會發送多個請求,在設置testChunks為true后(在插件中默認就是true),會發送與服務器進行分片校驗的請求,下面的第一個get請求就是該請求;后面的每一個post請求都是上傳分片的請求

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

看一下發送給服務端的參數,其中chunkNumber表示當前是第幾個分片,totalChunks代表所有的分片數,這兩個參數都是都是插件根據你設置的chunkSize來計算的。

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

需要注意的就是在最后文件上傳成功的事件中,通過后臺返回的字段,來判斷是否要再給后臺發送一個文件合并的請求。

6. MD5的計算過程

斷點續傳及秒傳的基礎是要計算文件的MD5,這是文件的唯一標識,然后服務器根據MD5進行判斷,是進行秒傳還是斷點續傳。

在file-added事件之后,就計算MD5,我們最終的目的是將計算出來的MD5加到參數里傳給后臺,然后繼續文件上傳的操作,詳細的思路步驟是:

把uploader組件的autoStart設為false,即選擇文件后不會自動開始上傳 先通過 file.pause()暫停文件,然后通過H5的FileReader接口讀取文件 將異步讀取文件的結果進行MD5,這里我用的加密工具是spark-md5,你可以通過npm install spark-md5 --save來安裝,也可以使用其他MD5加密工具。 file有個屬性是uniqueIdentifier,代表文件唯一標示,我們把計算出來的MD5賦值給這個屬性 file.uniqueIdentifier = md5,這就實現了我們最終的目的。 通過file.resume()開始/繼續文件上傳。

/*** 計算md5,實現斷點續傳及秒傳* @param file*//*** 計算md5,實現斷點續傳及秒傳* @param file*/ computeMD5(file) { let fileReader = new FileReader(); let time = new Date().getTime(); let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; let currentChunk = 0; const chunkSize = 10 * 1024 * 1000; let chunks = Math.ceil(file.size / chunkSize); let spark = new SparkMD5.ArrayBuffer(); // 文件狀態設為'計算MD5' this.statusSet(file.id, ’md5’); file.pause(); loadNext(); fileReader.onload = (e => { spark.append(e.target.result); if (currentChunk < chunks) { currentChunk++; loadNext(); // 實時展示MD5的計算進度 this.$nextTick(() => { $(`.myStatus_${file.id}`).text(’校驗MD5 ’+ ((currentChunk/chunks)*100).toFixed(0)+’%’) }) } else { let md5 = spark.end(); this.computeMD5Success(md5, file); console.log(`MD5計算完畢:${file.name} nMD5:${md5} n分片:${chunks} 大小:${file.size} 用時:${new Date().getTime() - time} ms`); } }); fileReader.onerror = function () { this.error(`文件${file.name}讀取出錯,請檢查該文件`) file.cancel(); }; function loadNext() { let start = currentChunk * chunkSize; let end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; fileReader.readAsArrayBuffer(blobSlice.call(file.file, start, end)); }},computeMD5Success(md5, file) { // 將自定義參數直接加載uploader實例的opts上 Object.assign(this.uploader.opts, { query: { ...this.params, } }) file.uniqueIdentifier = md5; file.resume(); this.statusRemove(file.id);},

給file的uniqueIdentifier 屬性賦值后,請求中的identifier即是我們計算出來的MD5

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

7. 秒傳及斷點續傳

在計算完MD5后,我們就能談斷點續傳及秒傳的概念了。

服務器根據前端傳過來的MD5去判斷是否可以進行秒傳或斷點續傳:

a. 服務器發現文件已經完全上傳成功,則直接返回秒傳的標識。 b. 服務器發現文件上傳過分片信息,則返回這些分片信息,告訴前端繼續上傳,即斷點續傳。7.1 對于前端來說

在每次上傳過程的最開始,vue-simple-uploader會發送一個get請求,來問服務器我哪些分片已經上傳過了,

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

這個請求返回的結果也有幾種可能:

a. 如果是秒傳,在請求結果中會有相應的標識,比如我這里是skipUpload為true,且返回了url,代表服務器告訴我們這個文件已經有了,我直接把url給你,你不用再傳了,這就是秒傳。

圖a1:秒傳情況下后臺返回值

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

圖a2:秒傳gif

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

b. 如果后臺返回了分片信息,這是斷點續傳。如圖,返回的數據中有個uploaded的字段,代表這些分片是已經上傳過的了,插件會自動跳過這些分片的上傳。

圖b1:斷點續傳情況下后臺返回值

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

圖b2:斷點續傳gif

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

c. 可能什么都不會返回,那這就是個全新的文件了,走完整的分片上傳邏輯

7.2 前端做分片檢驗:checkChunkUploadedByResponse

前面講的是概念,現在說一說前端在拿到這些返回值之后怎么處理。插件自己是不會判斷哪個需要跳過的,在代碼中由options中的checkChunkUploadedByResponse控制,它會根據 XHR 響應內容檢測每個塊是否上傳成功了,成功的分片直接跳過上傳你要在這個函數中進行處理,可以跳過的情況下返回true即可。

checkChunkUploadedByResponse: function (chunk, message) { let objMessage = JSON.parse(message); if (objMessage.skipUpload) { return true; } return (objMessage.uploaded || []).indexOf(chunk.offset + 1) >= 0},

注:skipUpload 和 uploaded 是我和后臺商議的字段,你要按照后臺實際返回的字段名來。

8. 源碼及后記

總共幾個文件,app.vue,封裝的全局上傳組件globalUploader.vue,調用組件的demo.vue,源碼放到github上了:https://github.com/shady-xia/Blog/tree/master/vue-simple-uploader。

globalUploader源碼中的ticket和api都是自己用的, 一個是accesstoken,一個是基于axios封裝的請求庫,請根據你的業務需求替代之。另外上傳界面的展開和收起用到了jquery,通知用到了Element的組件,請忽略之。

本人水平有限,更多的是提供一個思路,供大家參考。

封裝完這個插件后,再加上開發文件資源庫,我發現已經基本實現了一個簡易的百度網盤了,一個管理系統,功能搞的這么復雜,坑爹啊!

8.1 關于第一個分片丟失問題

關于開啟了testChunk后服務器收不到第一個分片的問題:simpleUploader文檔上是這么寫的:

基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能

testChunk的那個get請求,默認帶了第一個分片給服務端,如果服務端返回的是200狀態,則假定當前塊已經上傳過了,不會再上傳了;所以這里服務器要改成其他http狀態碼,比如204,這樣就不在“ 200, 201, 202”這個集合里了,代表服務端還沒有這個塊,需要按照標準模式上傳,這樣第一個分片就會再次被上傳了

2019/8/6更新

1、優化了計算文件MD5的方式,展示MD5的計算進度

之前文章中計算MD5的方式為對整個文件直接計算MD5,很吃內存,容易導致瀏覽器崩潰我改成了通過分片讀取文件的方式計算MD5,防止直接讀取大文件時因內存占用過大導致的網頁卡頓、崩潰

2、新增了的自定義的狀態

(之前我就封裝了幾種自定義狀態,最近總有小伙伴問怎么沒有“校驗MD5”,“合并中”這些狀態,我就把我的方法寫出來了,方式很笨,但是能實現效果)

插件原本只支持了success、error、uploading、paused、waiting這幾種狀態,

由于業務需求,我額外增加了“校驗MD5”、“合并中”、“轉碼中”、“上傳失敗”這幾種自定義的狀態

由于前幾種狀態是插件已經封裝好的,我不能改源碼,只能用比較hack的方式:當自定義狀態開始時,要手動調一下statusSet方法,生成一個p標簽蓋在原本的狀態上面;當自定義狀態結束時,還要手動調用statusRemove移除該標簽。

this.statusSet(file.id, ’merging’);this.statusRemove(file.id);

具體使用可以參考源碼,同時希望simple-uploader的插件作者后面能夠支持自定義狀態的配置。

到此這篇關于基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點續傳的全局上傳插件功能的文章就介紹到這了,更多相關vue simple uploader封裝內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 爱情岛论坛亚洲品质自拍网址 | 97久久精品一区二区三区观看 | 午夜天堂在线观看 | 欧美激情国产日韩精品一区18 | av网站一区 | 黄色福利片 | 久久摸摸碰碰97网站 | 亚洲欧美综合一区二区三区 | 嫩草影院一区二区 | 青娱乐极品视频在线 | 国产精品一线二线三线 | 樱桃成人精品视频在线播放 | 8x8ⅹ国产精品8x红人影库 | 成人动漫h在线观看 | 久久免费看片 | eeuss影院一区二区三区 | 综合伊人 | 少妇太紧太爽又黄又硬又爽小说 | 在线观看所有av | 日本黄色美女网站 | 国产美女视频一区二区三区 | 一线二线三线天堂 | 国产69精品久久久久久人妻精品 | 搡老熟女老女人一区二区 | 欧美亚洲综合另类 | 青青草成人免费视频 | 亚洲精品欧美综合四区 | 污污视频网站在线 | 国产欧美精品一区二区色综合 | 久久久99精品免费观看 | 丝袜视频在线 | 久久国产36精品色熟妇 | 一级二级av | 亚洲国产欧美国产综合一区 | 男女做www免费高清视频网站 | 色播五月婷婷 | 国产精品亚洲一区二区无码 | 四虎永久在线精品免费观看网站 | 性爱免费在线视频 | 日日天日日夜日日摸 | 4438五月天| 免费看国产黄色 | 性欧美ⅹxxxx极品少妇小说 | 国产精品破处 | a级淫片一二三区在线播放 a天堂v | 在线看片网站 | 国产美女在线精品免费观看 | 亚洲精品九九 | 久草五月| a在线观看视频 | 国产乱淫av免费观看 | 樱桃成人精品视频在线播放 | 欧美一区二区三区影院 | 三级伦理精品专区 | 澳门黄色录像 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 日躁夜躁狠狠躁2001 | 国产黄色av | 天天干天天噜 | 无尽夜久久久久久久久久 | 免费涩涩| 91二区 | 国产成人a亚洲精v品无码 | 久久精品99久久 | 免费观看亚洲视频 | 黄大色黄女片18第一次 | 午夜伦y4480影院中文字幕 | 无码乱码av天堂一区二区 | 欧美成人做爰猛烈床戏 | 99国产精品白浆在线观看免费 | 粉嫩av一区二区三区四区在线观看 | 草草网站影院白丝内射 | 国产99久一区二区三区a片 | 成人禁污污啪啪入口 | 777色视频| 成人性生交大片免费看中文 | 秋葵视频在线 | 51国偷自产一区二区三区的 | 99久久精品费精品国产 | 欧美乱妇无乱码大黄a片 | 亚洲欧美色一区二区三区 | 亚洲欧美一级 | 91精品啪在线观看国产线免费 | 欧美性免费| 精区一品二品星空传媒 | 亚洲欧美综合精品久久成人网无毒不卡 | jlzzjizz在线播放观看 | 欧洲成人综合 | 无码人妻一区二区三区免费视频 | 国产一级免费看 | 国产成人av乱码在线观看 | 成年人在线观看av | 性欧美激情 | 男人天堂综合网 | 成人做爰在线观看 | 久久影院午夜理论片无码 | 好吊妞人成视频在线观看27du | 久久亚洲成人av | 亚洲字幕av一区二区三区四区 | 熟女精品视频一区二区三区 | 国产精品无码无卡在线播放 | 久久久精品国产 | 51ⅴ精品国产91久久久久久 | 黑人狂躁日本妞一区二区三区 | 欧美日在线 | 精品h视频| 美日韩av在线播放 | 一区二区三区视频在线 | 国产又粗又猛又大爽老大爷 | 日韩第一视频 | 精品国产露脸对白在线观看 | 日韩在线观看视频一区二区 | 日韩a级片在线观看 | 成人性午夜免费网站蜜蜂 | 很污的网站| 欧美亚洲色图视频 | 4438x成人网最大色成网站 | 亚洲成人网在线 | 成人天堂视频在线观看软件 | 伊人中文字幕无码专区 | 久久精品aⅴ无码中文字字幕蜜桃 | 日日婷婷夜日日天干 | 免费看成人片 | 丰满少妇一区二区三区专区 | www.17.com嫩草影院| 久久亚洲伊人 | 99久久无码一区人妻a黑 | 国产无套粉嫩白浆内谢 | 欧美亚洲国产精品久久高清 | 激情久久久久久久 | 国产麻豆一精品一av一免费 | 亚洲成色www久久网站瘦与人 | 疯狂做受xxxx高潮视频免费 | 欧美激情一区二区三区成人 | 肉丝美足丝袜一区二区三区四 | 极品美女极度色诱视频在线 | 欧美午夜精品久久久久久孕妇 | 久久艹精品视频 | 天堂在线www天堂中文在线 | 刘亦菲国产毛片bd | 日日骚一区二区 | 国产午夜一区二区三区 | 免费看中国毛片 | 中文字幕av无码一区二区三区 | 国产真实乱免费高清视频 | 午夜国产福利在线 | 波多野结衣av一区二区三区中文 | www.中文字幕 | 少妇熟女视频一区二区三区 | 国产精品久久久久久久小唯西川 | 狠狠色综合久久婷婷 | 伊人久久免费视频 | 三级色视频 | 国产精品午夜小视频观看 | 午夜精品久久久久久久91蜜桃 | 欧美色女人| 欧美日韩综合一区二区三区 | 高清国产午夜精品久久久久久 | av天堂久久天堂色综合 | 97精品国产露脸对白 | 中文字幕在线免费观看视频 | 亚欧在线观看 | 狠狠色伊人亚洲综合成人 | 少妇太爽了在线观看 | 激情av综合 | 国产成a人亚洲精品无码樱花 | 国产精久 | www亚洲在线 | www久久爱cn| 中文字幕蜜桃 | 成人无码视频免费播放 | 日韩av黄色片 | 91亚洲狠狠婷婷综合久久久 | 亚洲日本香蕉视频 | 国产精品欧美一区二区三区奶水 | 盗摄精品av一区二区三区 | 亚洲欧美一区二区三区 | 亚洲视频大全 | 国产精品亚洲欧美日韩久久制服诱 | 欧美一区二区影视 | 夜夜天天拍拍 | 国产欧美日韩精品a在线观看 | 美女扒开大腿让男人桶 | 国产成人精品一区二 | 国产精品二区三区 | 亚洲色p | 国产午夜久久久 | 888久久| 国产精品一区在线播放 | 国产成人综合在线 | 另类专区欧美 | 国产精品永久久久 | 97国精产品无人区一码二码 | 国产精品午夜福利视频234区 | 男女69视频 | 亚洲一本大道无码av天堂 | 国内少妇偷人精品视频免费 | 老女人伦理中文字幕 | 成年无码av片完整版 | 一级一级一片免费 | 亚洲精品国产一区二区精华液 | 日韩欧美福利 | 日日碰狠狠丁香久燥 | 九九热在线观看 | 激情综合网五月婷婷 | 99久久99久久精品免费看蜜桃 | 裸体精品bbbbbbbbb | 黑人邻居太猛中文字幕hd | 好湿好紧太硬了我太爽了视频 | 久久久久久高清 | 亚洲污在线观看 | 亚洲午夜精品久久久久久人妖 | 国产a∨精品一区二区三区不卡 | 蜜桃av噜噜 | 亚洲精品乱码久久久久久蜜桃不卡 | 中文精品久久久久人妻不卡 | 97精品视频在线播放 | 亚洲国产精品久久久久婷婷老年 | 中文字幕一区在线观看视频 | 日本毛茸茸bbbbb潮喷 | 欧美精品乱码久久久久久按摩 | 亚洲欧美日韩国产精品b站在线看 | 生活片毛片 | 免看一级a毛片一片成人不卡 | 久久国产劲暴∨内射 | www.国产在线播放 | 成年美女黄网色视频免费4399 | 99精产国品一二三产品香蕉 | 蜜桃视频一区二区在线观看 | 亚洲爆乳无码精品aaa片蜜桃 | 国产一区视频在线免费观看 | 伊人色综合久久天天五月婷 | 日韩精彩视频在线观看 | 国产精品女丝袜白丝袜 | 干在线视频 | 在线成人免费 | 91porny首页入口 | 中文字幕无码av波多野吉衣 | 热久久久久 | 天堂视频免费 | 无码国产精品久久一区免费 | 精品久久久久久中文字幕2017 | 少妇做爰免费视频了 | 国外av网站 | 中国白嫩丰满人妻videos | 91精品久久久久久 | 国外亚洲成av人片在线观看 | a欧美在线 | 婷婷影院91xxxss | 欧美韩一区二区三区 | 欧美体内she精高潮 欧美体内谢she精2性欧美 | 91久久久久久波多野高潮 | 欧美视频在线观看亚洲欧 | 成人黄色激情视频 | 涩涩动漫视频 | 在线观看欧美国产 | 国产三级做爰在线播放五魁 | 五月激情婷婷在线 | 国产又猛又黄又爽 | 大江大河第3部48集在线观看 | 亚洲啪啪少妇裸体艺术 | 操操操日日日 | 综合亚洲网 | 天天综合网永久 | 亚洲精品乱码久久久久久日本 | 不卡免费视频 | 日韩一区二区精品视频 | 77成人影视 | 无码专区aaaaaa免费视频 | 91精品国产一区二区三区动漫 | 99热免费在线 | 天天躁日日躁狠狠躁av中文 | 黄色片免费观看 | 大地资源中文在线观看官网第二页 | 波多野成人无码精品电影 | 少妇无码av无码专区线 | 精品久久久久久无码中文野结衣 | 天天狠天天插天天透 | 午夜精品小视频 | 亚洲精品久久久久玩吗 | av永久| 色爽爽爽爽爽爽爽爽 | 中文字幕 人妻熟女 | 中文字幕奈奈美抱公侵犯 | 久久久国产成人一区二区三区 | 欧美jizzhd精品欧美巨大免费 | 欧美高清com | 无码 制服 丝袜 国产 另类 | 91在线无精精品一区二区 | 在线视频观看一区二区 | 精品一区二区三区四区 | 青青草原综合网 | 香蕉视频一区二区 | 国产成人综合久久 | 小宝极品内射国产在线 | 亚洲精品香蕉 | 久久九九热视频 | 国产sm鞭打折磨调教视频 | 看片在线 | 激情综合色综合啪啪五月丁香 | 黄色的网站免费看 | www,日韩| 视频在线观看网站免费 | 天堂va在线观看 | 泰国性xxx视频 | 国产精品任我爽爆在线播放 | 亚洲男人第一av网站 | 五月婷婷一区二区 | 亚洲精品毛片一区二区 | 黄色毛片毛茸茸 | 久草福利在线 | 欧美一级在线免费 | 欧美夫妇交换xxx | 亚洲奶汁xxxx哺乳期 | 日本xxxx裸体xxxx视频大全 | 成人免费视频一区二区三区 | 国产精品久久久久久久午夜片 | a级片在线免费观看 | 久久草在线免费 | 免费看日产一区二区三区 | 日日碰狠狠躁久久躁96avv | 国产又粗又猛又爽又黄的 | 成年人激情视频 | 他也色在线 | 放荡闺蜜高h苏桃情事h | 男女视频久久 | 丰满熟妇乱又伦在线无码视频 | 无码av波多野结衣 | 中国黄色一级毛片 | 高清欧美精品xxxxx在线看 | 色综合九九 | 后进极品圆润翘臀在线播放 | 美国女人毛片 | 国产区一区二区三 | 别揉我奶头~嗯~啊~一区二区三区 | 国产不卡视频一区二区三区 | 精品二区在线观看 | 亚洲国产精品久久久久婷婷老年 | 欧美色哟哟 | 欧美女同视频 | 日韩精品免费 | 亚洲综合无码久久精品综合 | 久草在线视频新时代视频 | 日本欧美成人 | 天天爽夜夜爽 | 亚洲影院在线播放 | 免费欧美一级视频 | 在线成人精品国产区免费 | 国产av无码专区亚洲a∨毛片 | 亚洲综合色视频 | 人人超碰97 | 国内露脸少妇精品视频 | 日本aⅴ免费视频一区二区三区 | 国产精品成人一区二区 | 视频在线观看h | 国产女 | 午夜暗香一3视频丨vk | 国产剧情av麻豆香蕉精品 | 在线播放免费人成毛片乱码 | 美女bbbbb免费视频 | 人人妻人人澡人人爽欧美精品 | 色99色| 不卡视频一区二区三区 | 亚洲 欧美变态 另类 综合 | 18pao国产成视频永久免费 | 一级二级在线观看 | 欧美三级中文字幕 | 综合激情亚洲 | 非洲黑妞xxxxhd精品 | 国产黄色精品网站 | 天天爽影院一区二区在线影院 | 妓女爽爽爽爽爽妓女8888 | 久久激情综合网 | 色欲av无码一区二区人妻 | www久久伊人 | 日韩精品射精管理在线观看 | 爱爱的网站| 久在线观看福利视频 | 青青草国产精品一区二区 | 成人中文字幕+乱码+中文字幕 | 大波大胸video巨乳日本 | 天天操天天摸天天爽 | 欧美99视频 | 久久国产精品福利一区二区三区 | 国内精品第一页 | 西西午夜无码大胆啪啪国模 | 中文字幕网址在线 | 日日摸天天摸爽爽狠狠97 | 久久久性色精品国产免费观看 | 国产精品一区二区无线 | 特级av毛片免费观看 | 九九精品视频在线观看 | 国产精品久久久久免费观看 | 亚洲涩色| 国产乱色国产精品播放视频 | 一级毛片黄色 | 久久五月精品中文字幕 | 无遮挡19禁啪啪成人黄软件 | 99热这里只有精品99 | www夜夜骑| 后进极品白嫩翘臀在线视频 | 亚洲少妇自拍 | 国产在线不卡一区二区三区 | 国产亚洲精品女人久久久久久 | 国产精品99久久久久人中文网介绍 | 偷拍女人私密按摩高潮视频 | 天天摸天天透天天添 | 欧美福利视频在线 | 少妇高潮毛片高清免费播放 | 国产一区二区三区精品久久久 | 日本成人a | 伊人ab | 五月天激情视频 | 在线观看污网站 | 九九三级| 伊人久久精品一区二区三区 | 无遮挡国产高潮视频免费观看 | 超碰人人人人人人人 | 黄色网址在线视频 | 97久久超碰中文字幕 | 草草影院国产第一页 | 免费人成打屁股网站www | 野外(巨肉高h) | 男女操操视频 | 美女黄色一级视频 | 亚洲精品一区三区三区在线观看 | 秋霞欧美一区二区三区视频免费 | 久热免费在线视频 | 天天舔天天爱 | 蜜桃视频日韩 | 免费人妻无码不卡中文字幕系 | 日本美女日批视频 | 国产山村乱淫老妇av | 日韩精品久久久久久免费 | 天天干天天干天天干 | 人妻无码一区二区三区免费 | 欧美一卡二卡三卡四卡视频区 | 激情亚洲网 | 热re99久久精品国99热线看 | 欧美久草在线 | 女人毛片视频 | 欧美福利网站 | 美女131爽爽爽 | 色老头在线一区二区三区 | 自拍偷拍福利视频 | 99久久精品免费看国产 | 国产剧情自拍 | 国产xxxx做受性欧美88 | 成年人免费高清视频 | 成人理论视频 | 九色蜜桃臀丨porny丨自拍 | 精品国产污污免费网站入口爱酱 | 色六月婷婷 | 久久男人av资源网站 | 少妇无码一区二区二三区 | 亚洲最大在线观看 | 成人区人妻精品一区二区不卡 | 欧美在线日韩在线 | 久久精品丝袜高跟鞋 | 中文字幕亚洲精品日韩 | 欧美人牲 | 国产伦理一区二区三区 | 天天摸天天舔 | 中文字幕av日韩精品一区二区 | 精品人伦一区二区三区蜜桃免费 | 日本熟妇hdsex视频 | 新呦u视频一区二区 | 三级做爰在线观看视频 | 久久精品www人人爽人人 | 草草地址线路①屁屁影院成人 | 一区免费视频 | 欧美日韩1234 | 香蕉国产 | 久久精品道一区二区三区 | 又硬又粗又大一区二区三区视频 | 国产乱了真实在线观看 | 久久99精品久久久久久久清纯 | 欧美变态另类刺激 | 亚洲精品午夜久久久久久久久久久 | 国产日产精品久久快鸭的功能介绍 | 亚洲午夜视频在线观看 | 91沈先生探花极品在线 | 久久福利视频一区 | 国产女人高潮的av毛片 | 中国美女一级黄色片 | 欧美日韩亚洲综合 | av一区免费 | 午夜| 欧美成人手机视频 | 色噜| 99精产国| 欧美最猛黑人xxxx黑人表情 | 亚洲成人av片 | 色婷综合 | 麻豆观看 | 久久激情综合网 | 午夜亚洲福利 | 欧美熟妇另类久久久久久多毛 | av一区+二区在线播放 | 嫩草视频在线观看 | 五月天激情社区 | 天天噜日日噜狠狠噜免费 | aaaaa少妇高潮大片在按摩线 | 国产中文字字幕乱码无限 | 国产午夜福利视频在线观看 | 午夜免费国产体验区免费的 | 成人黄色动漫在线观看 | 免费观看日韩av | 8090理论片午夜理伦片 | 国产莉萝无码av在线播放 | 成人秘密在线观看 | 女高中生自慰污污网站 | 日韩五月 | 东北少妇av | 亚洲男男网站 | 99啦porny丨首页入口 | 麻豆av一区二区三区久久 | 中字幕视频在线永久在线观看免费 | 草久影院 | 中文字幕麻豆 | 国产精品对白刺激久久久 | 秋霞影院午夜丰满少妇在线视频 | 国产午夜影院 | 国产亚洲精品成人aa片新蒲金 | 免费一区区三区四区 | 欧美成人一区二免费视频小说 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 久草资源在线视频 | 亚洲熟色妇av日韩熟色妇在线 | 老色鬼永久视频网站 | 中文字幕成人网 | 日本亚洲高清 | 亚洲自拍中文字幕 | 国产精品久久久久久久免费大片 | 性一交一伦一伦一视频 | 国产丝袜视频 | av网站在线观看免费 | 国产精品专区在线 | 国产精品30p | 亚洲精品人人 | 欧美高清日韩 | 日韩欧美一区二区三区久久婷婷 | 成人在线观看免费高清 | 国产精品欧美久久久久久 | 全部免费播放在线毛片 | 人人干干人人 | 欧美性猛交xxxx乱大交 | 一二三在线视频 | 午夜精品久久久久久中宇 | 动漫羞免费网站中文字幕 | 婷婷激情亚洲 | 男人添女荫道口喷水 | 国产成人精品亚洲 | 久久伊人蜜桃av一区二区 | 成人免费淫片aa视频免费 | 新久小草在线 | 97精品国产97久久久久久免费 | 18禁美女裸体爆乳无遮挡 | 狠狠色狠狠色很很综合很久久 | 国产精品人人妻人人爽 | 天干天干天啪啪夜爽爽av软件 | 国产真实乱对白精彩 | 美女的奶胸大爽爽大片 | 国产精品一区二区6 | 国产免费一区二区视频 | 在线播放日本 | 日韩激情视频在线 | 国产精品久久国产精麻豆99网站 | 国产精品一区二区三区四区五区 | 久久久久久网站 | 国产黄色av网站 | 国产亚洲精品久久久久久大师 | 午夜一区二区三区四区 | 98色| wwwyoujizzcom在线| 娇小萝被两个黑人用半米长 | 久久噜噜 | 激情五月综合网 | 一二三在线视频 | 青青草视频 | 国产毛片精品一区二区 | 丰满的少妇xxxxx人伦理 | 宅男噜噜噜66一区二区 | 日韩有码第一页 | www.在线视频 | a级黄色录像 | 欧美50p| 欧美成人精品欧美一级 | 国产伦孑沙发午休精品 | 奴色虐av一区二区三区 | 在线综合色 | 国产高清av首播原创麻豆 | 精品99久久久 | 久热精品视频在线 | 四川少妇被弄到高潮 | 成人性生活免费视频 | 亚洲精品乱码久久久久久久久久 | www.youjizz.com日本 | 六月综合激情 | 青青草午夜 | 秋霞影院午夜 | 天干天干啦夜天干天2017 | 国产在线精品一区二区在线播放 | 欧美激情18 | 国产成人精品aa毛片 | 成人精品久久 | 蜜桔视频成人免费观看 | 一级性生活免费视频 | 亚洲va欧美va人人爽春色影视 | 亚洲福利网站 | 亚洲日韩电影久久 | 精品自拍第一页 | 国产69精品久久久久久人妻精品 | 婷婷综合色 | 99亚洲国产精品精华液 |