亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

Java服務(wù)端大文件分片上傳與斷點(diǎn)續(xù)傳完整方案

Java服務(wù)端大文件分片上傳與斷點(diǎn)續(xù)傳完整方案 1. 從一根管道說(shuō)起巡檢日志附件為什么會(huì)大到讓人頭疼先還原一個(gè)現(xiàn)場(chǎng)場(chǎng)景。能源化工企業(yè)的管道巡檢可不是拿著手電筒走一圈就完事。巡檢人員要記錄閥門(mén)編號(hào)、法蘭連接狀態(tài)、防腐層破損情況、保溫層是否脫落遇到疑似泄漏點(diǎn)要用氣體檢測(cè)儀讀數(shù)還要拍照留存?,F(xiàn)在很多企業(yè)還配了紅外熱成像儀一張紅外照片就是十幾兆。要是發(fā)現(xiàn)隱患現(xiàn)場(chǎng)拍一段視頻三分鐘就奔著200兆去了。這些素材匯總到一起就是巡檢日志的附件。一條巡檢記錄掛上五六張照片加一段視頻附件總量動(dòng)輒幾百M(fèi)B遇到大修期間的專(zhuān)項(xiàng)檢查一條日志掛上幾GB附件也不是什么稀罕事。問(wèn)題就出在上傳環(huán)節(jié)。傳統(tǒng)化工企業(yè)的現(xiàn)場(chǎng)網(wǎng)絡(luò)環(huán)境沒(méi)那么理想。很多廠(chǎng)區(qū)位于偏遠(yuǎn)地區(qū)車(chē)間里有Wi-Fi但信號(hào)不穩(wěn)定地下管廊和罐區(qū)深處甚至只有4G信號(hào)還得碰運(yùn)氣。工人辛辛苦苦拍完素材點(diǎn)擊上傳進(jìn)度條走到68%忽然斷了再點(diǎn)一次又從頭開(kāi)始傳。幾百M(fèi)B的文件傳了三四次都失敗最后只能回到辦公室里連有線(xiàn)網(wǎng)絡(luò)再傳一遍。這種情況在真實(shí)生產(chǎn)環(huán)境里每天都在發(fā)生。斷點(diǎn)續(xù)傳的價(jià)值恰恰就體現(xiàn)在這種網(wǎng)絡(luò)不靠譜但業(yè)務(wù)不能斷的場(chǎng)景里。它解決的核心問(wèn)題很簡(jiǎn)單文件已經(jīng)傳了一部分能不能把上傳進(jìn)度記住下次接著傳而不是從頭來(lái)過(guò)這個(gè)需求在Java服務(wù)端落地牽扯到的技術(shù)點(diǎn)比很多人想象的多得多。不是一個(gè)MultipartFile接收完事而是要處理分片、斷點(diǎn)、校驗(yàn)、并發(fā)甚至還要考慮臨時(shí)文件的清理策略。我下面把這套方案的完整實(shí)現(xiàn)思路、核心代碼和踩坑經(jīng)歷全部拆開(kāi)講。2. 斷點(diǎn)續(xù)傳方案選型為什么最終選了HTTP Range加分片落盤(pán)先明確需求邊界。在能源化工企業(yè)這種場(chǎng)景下做斷點(diǎn)續(xù)傳有幾個(gè)硬性約束單文件體積大集中在200MB到2GB之間偶爾有視頻素材超過(guò)2GB。上傳環(huán)境不穩(wěn)定Wi-Fi、4G、有線(xiàn)網(wǎng)絡(luò)來(lái)回切換隨時(shí)可能中斷。服務(wù)端需要知道文件傳了多少、剩多少客戶(hù)端需要能從中斷位置恢復(fù)。文件必須完整可校驗(yàn)巡檢日志涉及安全追溯半截文件不算數(shù)。圍繞這些約束業(yè)界比較成熟的方案就那幾種。2.1 方案對(duì)比HTTP Range、分片上傳、第三方SDK第一種是HTTP Range斷點(diǎn)續(xù)傳??蛻?hù)端先向服務(wù)端詢(xún)問(wèn)文件已經(jīng)傳了多大服務(wù)端返回已接收的字節(jié)數(shù)客戶(hù)端用基于HTTP的Range機(jī)制從那個(gè)位置繼續(xù)寫(xiě)。這種方式邏輯簡(jiǎn)單服務(wù)端只需要用一個(gè)RandomAccessFile按字節(jié)偏移寫(xiě)入就行但是對(duì)網(wǎng)絡(luò)異常特別敏感——只要TCP連接斷了客戶(hù)端不是總能準(zhǔn)確知道服務(wù)端到底寫(xiě)到哪個(gè)位置需要頻繁發(fā)起探測(cè)請(qǐng)求。第二種是前端分片上傳。把大文件切成固定大小的塊比如每片5MB客戶(hù)端逐片上傳每片都有獨(dú)立的序號(hào)和校驗(yàn)值。服務(wù)端先把分片落盤(pán)到臨時(shí)目錄全部傳完后合并。這種方式對(duì)網(wǎng)絡(luò)抖動(dòng)容忍度高單片傳失敗只需要重傳這一片而且支持并發(fā)上傳多片。缺點(diǎn)是邏輯復(fù)雜度上來(lái)了需要管理分片狀態(tài)、合并、冪等服務(wù)端多一套分片管理表。第三種是直接用云存儲(chǔ)SDK。比如接入對(duì)象存儲(chǔ)的斷點(diǎn)續(xù)傳能力服務(wù)端只做轉(zhuǎn)發(fā)。但能源化工企業(yè)很多數(shù)據(jù)不出廠(chǎng)區(qū)內(nèi)網(wǎng)部署是剛需公有云SDK直接出局。最終選型是分片上傳為主、本地落盤(pán)續(xù)傳為輔的混合方案。前端把文件切成固定分片一片一片傳服務(wù)端用分片序號(hào)加文件標(biāo)識(shí)來(lái)記錄上傳進(jìn)度。前端本地也緩存一份哪些分片已成功的記錄斷網(wǎng)恢復(fù)后直接從中斷處分片重傳而不是整文件重傳。提示分片方案和服務(wù)端斷點(diǎn)續(xù)傳不矛盾。分片上傳解決的是從哪一片繼續(xù)服務(wù)端的RandomAccessFile解決的是寫(xiě)文件時(shí)從哪個(gè)字節(jié)偏移繼續(xù)。兩者結(jié)合才是完整可靠的斷點(diǎn)續(xù)傳。2.2 分片大小的選擇邏輯分片大小直接決定整個(gè)方案的上限體驗(yàn)。我做過(guò)幾輪對(duì)比測(cè)試在園區(qū)內(nèi)網(wǎng)條件下結(jié)論是這樣的分片大小網(wǎng)絡(luò)中斷損失并發(fā)效率適用場(chǎng)景1MB小單片幾乎不會(huì)失敗需要大量并發(fā)請(qǐng)求才能跑滿(mǎn)帶寬極差網(wǎng)絡(luò)如地下管廊5MB中等單片成功率較高8-16并發(fā)輕松跑滿(mǎn)百兆帶寬廠(chǎng)區(qū)Wi-Fi、4G20MB較大網(wǎng)絡(luò)抖動(dòng)時(shí)容易單片失敗并發(fā)需求低壓力小內(nèi)網(wǎng)有線(xiàn)高帶寬低延遲我推薦5MB。原因很實(shí)在5MB的分片在4G信號(hào)下就算丟幾個(gè)包單片重傳成本也很低而在百兆內(nèi)網(wǎng)下12到16個(gè)并發(fā)分片同時(shí)傳上傳速率能穩(wěn)定跑到60MB/s以上一上午就能傳完幾GB的巡檢視頻。分片再小到1MB服務(wù)端要處理的請(qǐng)求數(shù)暴增Tomcat線(xiàn)程池壓力大反而拉低整體吞吐。3. Java服務(wù)端收到分片之后核心處理鏈路與關(guān)鍵代碼方案定了接下來(lái)是Java服務(wù)端的核心實(shí)現(xiàn)。我按接收分片-落盤(pán)索引-合并校驗(yàn)三步拆解。3.1 先定義分片上傳的請(qǐng)求模型前端每次請(qǐng)求傳一片請(qǐng)求參數(shù)里必須帶上文件標(biāo)識(shí)、總分片數(shù)、當(dāng)前分片序號(hào)。這里我用文件指紋來(lái)做文件標(biāo)識(shí)也就是文件的MD5值這樣還能順便實(shí)現(xiàn)一個(gè)秒傳效果——服務(wù)端檢測(cè)到文件已經(jīng)存在完整版本直接返回上傳完成不用再傳。public class ChunkUploadRequest { private String fileId; // 文件唯一標(biāo)識(shí)用MD5 private Integer chunkIndex; // 當(dāng)前分片序號(hào)從0開(kāi)始 private Integer totalChunks; // 總分片數(shù) private Long totalSize; // 文件總字節(jié)數(shù) private MultipartFile file; // 當(dāng)前分片的文件流 }Controller層用RequestPart接收文件和其他字段這里不贅述SpringMVC的基礎(chǔ)寫(xiě)法重點(diǎn)講服務(wù)端接收后的核心邏輯。3.2 RandomAccessFile定位寫(xiě)入斷點(diǎn)續(xù)傳的地基服務(wù)端收到一個(gè)分片后要做的第一件事是把這個(gè)分片的內(nèi)容寫(xiě)到臨時(shí)文件對(duì)應(yīng)的偏移位置。偏移量是分片序號(hào)乘以分片大小這個(gè)計(jì)算很簡(jiǎn)單但寫(xiě)文件的方式有講究。private void writeChunkToFile(String basePath, ChunkUploadRequest request) { Path tempFile Paths.get(basePath, request.getFileId() .tmp); try (RandomAccessFile raf new RandomAccessFile(tempFile.toFile(), rw)) { long offset (long) request.getChunkIndex() * chunkSize; raf.seek(offset); byte[] buffer new byte[4096]; try (InputStream in request.getFile().getInputStream()) { int len; while ((len in.read(buffer)) ! -1) { raf.write(buffer, 0, len); } } } }RandomAccessFile的seek方法決定了寫(xiě)入起點(diǎn)這就是斷點(diǎn)續(xù)傳最底層的機(jī)制。前端傳第13片服務(wù)端就把指針移到13乘以5MB的偏移位置直接寫(xiě)不用管這個(gè)文件前面的部分是從哪來(lái)的。但這只是第一步如果只做這個(gè)一旦上傳中斷再恢復(fù)我怎么知道第13片前面已經(jīng)寫(xiě)完了所以還需要分片索引。3.3 分片索引用Redis記錄還差哪幾片我在生產(chǎn)環(huán)境里維護(hù)了一張分片上傳狀態(tài)表記錄每個(gè)文件標(biāo)識(shí)的接收情況。這張表的數(shù)據(jù)結(jié)構(gòu)不復(fù)雜但設(shè)計(jì)上有講究。用Redis位圖來(lái)處理這種場(chǎng)景非常合適。文件有多少片位圖就有多少位。收到第5片就把第5位置為1。查詢(xún)進(jìn)度時(shí)直接用bitcount統(tǒng)計(jì)有多少位是1和總分片數(shù)比較立刻知道傳完了沒(méi)有。// 分片到達(dá)后標(biāo)記位圖 stringRedisTemplate.opsForValue().setBit( UPLOAD_CHUNK_KEY fileId, request.getChunkIndex(), true ); // 查詢(xún)當(dāng)前已收到的分片數(shù) Long uploaded stringRedisTemplate.execute( (RedisCallbackLong) connection - connection.bitCount((UPLOAD_CHUNK_KEY fileId).getBytes()) ); // 已傳分片數(shù)和總分片數(shù)相等觸發(fā)合并 if (uploaded ! null uploaded request.getTotalChunks()) { mergeChunks(fileId); }選擇Redis而不是數(shù)據(jù)庫(kù)主要有兩個(gè)原因。一是位圖操作本身就是Redis的強(qiáng)項(xiàng)一個(gè)200MB文件的40個(gè)分片bitCount一次O(1)級(jí)別就出來(lái)了數(shù)據(jù)庫(kù)要多查幾十行記錄二是Redis的key過(guò)期機(jī)制可以順帶處理臨時(shí)文件的生命周期設(shè)置24小時(shí)過(guò)期上傳中斷的后臺(tái)任務(wù)會(huì)自動(dòng)大量緩存不用額外寫(xiě)清理邏輯。3.4 設(shè)置過(guò)期時(shí)間的副作用這里有個(gè)細(xì)節(jié)值得說(shuō)。Redis位圖標(biāo)記分片狀態(tài)時(shí)key的過(guò)期時(shí)間要從首次寫(xiě)入時(shí)設(shè)置而不是每次寫(xiě)入都刷新。原因很直接如果一個(gè)用戶(hù)上傳文件傳了10分鐘分片一直在寫(xiě)入每次寫(xiě)入都刷新過(guò)期時(shí)間那24小時(shí)的有效期就會(huì)無(wú)限順延但如果是傳了一會(huì)兒就斷網(wǎng)了服務(wù)端需要的是24小時(shí)后這個(gè)殘缺文件的臨時(shí)狀態(tài)自動(dòng)清掉所以過(guò)期時(shí)間只在第一次寫(xiě)入時(shí)設(shè)置。// 只在第一次上傳分片時(shí)設(shè)置過(guò)期時(shí)間 Boolean firstWrite stringRedisTemplate.opsForValue().setIfAbsent( UPLOAD_CHUNK_KEY fileId, 1, Duration.ofHours(24) );3.5 合并分片臨時(shí)文件轉(zhuǎn)正的最后一跳所有分片到齊之后觸發(fā)合并。合并不是把多個(gè)文件復(fù)制到一個(gè)文件里而是把分片按順序?qū)懭胍粋€(gè)完整文件。我用的是文件轉(zhuǎn)正策略分片寫(xiě)入臨時(shí)文件合并完成后再把臨時(shí)文件命名為正式文件名并刪除標(biāo)記狀態(tài)。private void mergeChunks(String fileId, String uploadDir, String targetDir) { Path tempFile Paths.get(uploadDir, fileId .tmp); Path targetFile Paths.get(targetDir, fileId _ System.currentTimeMillis() .bin); // 臨時(shí)文件已經(jīng)通過(guò)RandomAccessFile按偏移寫(xiě)入了所有分片 // 合并動(dòng)作本質(zhì)上是驗(yàn)證完整性 原子性改名 Files.move(tempFile, targetFile, StandardCopyOption.ATOMIC_MOVE); }很多第一次做分片上傳的人會(huì)在這一步犯一個(gè)錯(cuò)誤以為每個(gè)分片是獨(dú)立文件合并時(shí)要按順序把分片內(nèi)容復(fù)制進(jìn)最終文件。其實(shí)完全沒(méi)必要。所有分片從一開(kāi)始就是往同一個(gè)臨時(shí)文件的不同偏移位置寫(xiě)寫(xiě)入完成之后臨時(shí)文件本身就是完整的文件了。唯一要做的只是驗(yàn)證大小和校驗(yàn)值然后改名而已。這樣既快又不會(huì)有分片復(fù)制過(guò)程中順序錯(cuò)亂的風(fēng)險(xiǎn)。4. 可靠性保障校驗(yàn)、冪等、并發(fā)一個(gè)都不能漏斷點(diǎn)續(xù)傳如果只做能傳的部分那在生產(chǎn)環(huán)境里撐不過(guò)一周。我把這幾個(gè)月在生產(chǎn)環(huán)境里遇到過(guò)的可靠性問(wèn)題集中說(shuō)一下。4.1 校驗(yàn)不只是MD5還要校驗(yàn)大小和分片序號(hào)連續(xù)性分片上傳過(guò)程中最怕的是某個(gè)分片因?yàn)榫W(wǎng)絡(luò)問(wèn)題沒(méi)傳完整但服務(wù)端當(dāng)成正常分片寫(xiě)入臨時(shí)文件了。這種情況如果發(fā)生在中間某個(gè)分片最終的臨時(shí)文件大小是對(duì)的但內(nèi)容錯(cuò)位合并出來(lái)的文件就是壞的。解決辦法是雙校驗(yàn)。第一層是單分片校驗(yàn)。前端在請(qǐng)求頭帶兩個(gè)值分片的SHA-256值和分片大小。服務(wù)端把分片流寫(xiě)入臨時(shí)文件后立刻計(jì)算這個(gè)分片接收到的字節(jié)數(shù)。如果字節(jié)數(shù)不等于聲明的大小直接返回錯(cuò)誤要求前端重傳該分片。第二層是整文件校驗(yàn)。所有分片合并并改名后計(jì)算整個(gè)文件的大小和請(qǐng)求時(shí)聲明的totalSize比對(duì)。大小不一致說(shuō)明中間有分片寫(xiě)串了直接刪掉臨時(shí)文件讓前端重新傳。巡檢日志領(lǐng)域?qū)ξ募耐暾砸蟾咚晕易罱K加了全文件MD5比對(duì)以犧牲一點(diǎn)IO開(kāi)銷(xiāo)換絕對(duì)可靠。if (Files.size(targetFile) ! totalSize) { Files.deleteIfExists(targetFile); throw new UploadException(文件大小校驗(yàn)失敗所有分片需重傳); }4.2 冪等設(shè)計(jì)同一分片重復(fù)上傳不能造成數(shù)據(jù)錯(cuò)亂斷點(diǎn)續(xù)傳場(chǎng)景下客戶(hù)端斷網(wǎng)重連后經(jīng)常會(huì)重傳一個(gè)其實(shí)已經(jīng)成功上送的分片。這時(shí)候服務(wù)端如果不清不楚地又寫(xiě)了一次就會(huì)把臨時(shí)文件對(duì)應(yīng)偏移位置覆蓋掉。RandomAccessFile的seek加write天然是覆蓋寫(xiě)所以同一分片重復(fù)寫(xiě)結(jié)果是一致的這個(gè)問(wèn)題倒不大。真正的坑在Redis位圖狀態(tài)上。假設(shè)第10片實(shí)際沒(méi)傳成功但位圖被提前置為1了那合并時(shí)就會(huì)拿一個(gè)不完整的文件去轉(zhuǎn)正。所以請(qǐng)求處理順序必須是分片落盤(pán)成功 - 位圖置1 - 返回成功。任何一步?jīng)]完成都不要更新?tīng)顟B(tài)。4.3 高并發(fā)分片上傳時(shí)的文件鎖問(wèn)題前面提到過(guò)我推薦12到16個(gè)并發(fā)分片同時(shí)上傳。這意味著同一時(shí)間可能有十幾個(gè)線(xiàn)程在寫(xiě)同一個(gè)臨時(shí)文件的不同偏移位置。RandomAccessFile的寫(xiě)操作本身到操作系統(tǒng)層面是有并發(fā)保護(hù)的但Java層面多個(gè)線(xiàn)程同時(shí)調(diào)用write時(shí)write并不是全程線(xiàn)程安全的尤其是在寫(xiě)入長(zhǎng)度超過(guò)單次write緩沖限制時(shí)。保險(xiǎn)起見(jiàn)我給寫(xiě)文件的代碼塊加了ReentrantLock按fileId加鎖。同一文件的分片寫(xiě)操作串行化不同文件之間不互相阻塞。private final ConcurrentHashMapString, ReentrantLock lockMap new ConcurrentHashMap(); private ReentrantLock getFileLock(String fileId) { return lockMap.computeIfAbsent(fileId, id - new ReentrantLock()); } private void writeChunkWithLock(String fileId, ChunkUploadRequest request, String basePath) { ReentrantLock lock getFileLock(fileId); lock.lock(); try { writeChunkToFile(basePath, request); } finally { lock.unlock(); } }5. 生產(chǎn)環(huán)境里的性能調(diào)優(yōu)Tomcat、磁盤(pán)IO、大文件緩沖方案跑通之后性能優(yōu)化才是讓系統(tǒng)真的能扛住生產(chǎn)壓力的關(guān)鍵。巡檢日志的上傳窗口期高度集中早上班前一小時(shí)、下午班后一小時(shí)是上傳高峰幾十個(gè)巡檢員同時(shí)傳大文件服務(wù)端壓力不小。5.1 Tomcat參數(shù)調(diào)整與上傳限制Spring Boot內(nèi)嵌Tomcat默認(rèn)限制單次請(qǐng)求大小為1MB做分片上傳前必須改。分片本身只要5MB所以單次請(qǐng)求限制調(diào)到10MB就夠了不用為2GB的文件調(diào)大否則反而容易把線(xiàn)程池拖垮。spring.servlet.multipart.max-file-size10MB spring.servlet.multipart.max-request-size12MB同時(shí)把Tomcat的核心線(xiàn)程數(shù)和隊(duì)列長(zhǎng)度調(diào)整一下。分片上傳的請(qǐng)求特點(diǎn)是并發(fā)量大、單請(qǐng)求處理時(shí)間短我按這個(gè)特征把最大線(xiàn)程數(shù)從默認(rèn)的200調(diào)到400等待隊(duì)列從默認(rèn)的100調(diào)到200。server.tomcat.threads.max400 server.tomcat.threads.min-spare40 server.tomcat.accept-count2005.2 磁盤(pán)IO臨時(shí)目錄和正式目錄不要放在同一塊盤(pán)這個(gè)坑我踩過(guò)。一開(kāi)始臨時(shí)文件和最終文件都在應(yīng)用服務(wù)器的同一塊數(shù)據(jù)盤(pán)上巡檢高峰期上傳和合并同時(shí)進(jìn)行磁盤(pán)IO直接打滿(mǎn)上傳速率從60MB/s掉到不到10MB/s。后來(lái)我把臨時(shí)文件目錄放到一塊獨(dú)立的固態(tài)盤(pán)上正式文件目錄放在另一塊盤(pán)上。分片寫(xiě)入和合并轉(zhuǎn)正錯(cuò)開(kāi)IO路徑整個(gè)上傳鏈路就通了。如果條件有限只有一塊盤(pán)至少要把臨時(shí)目錄和正式目錄分在不同目錄層級(jí)避免ext4文件系統(tǒng)索引節(jié)點(diǎn)競(jìng)爭(zhēng)。5.3 合并大文件時(shí)的內(nèi)存控制合并分片不要用Files.readAllBytes去讀整個(gè)文件2GB的文件直接OOM。我上面用Files.move做轉(zhuǎn)正其實(shí)已經(jīng)繞開(kāi)了這個(gè)問(wèn)題。但文件校驗(yàn)時(shí)計(jì)算MD5同樣要注意要用流式計(jì)算每次讀64KB緩沖區(qū)而不是一次性載入內(nèi)存。private String calcMd5(Path file) throws IOException { MessageDigest md MessageDigest.getInstance(MD5); try (InputStream is Files.newInputStream(file)) { byte[] buffer new byte[65536]; int len; while ((len is.read(buffer)) ! -1) { md.update(buffer, 0, len); } } return Base64.getEncoder().encodeToString(md.digest()); }強(qiáng)調(diào)一句這塊代碼用Files.readAllBytes寫(xiě)過(guò)的人基本都見(jiàn)過(guò)OOM報(bào)錯(cuò)。6. 移入巡檢業(yè)務(wù)后的實(shí)際效果與二次踩坑整套方案遷移到巡檢日志系統(tǒng)之后我記錄了三個(gè)月的運(yùn)行數(shù)據(jù)。在同樣的弱網(wǎng)條件下大附件上傳成功率從改造前的不足六成提升到99.2%。剩余0.8%的失敗也主要集中在服務(wù)端重啟或存儲(chǔ)節(jié)點(diǎn)故障這類(lèi)極端情況斷點(diǎn)續(xù)傳機(jī)制本身沒(méi)有成為瓶頸。但有幾個(gè)業(yè)務(wù)層面的問(wèn)題值得單獨(dú)拿出來(lái)說(shuō)。6.1 斷點(diǎn)續(xù)傳不等于斷網(wǎng)續(xù)傳有同事問(wèn)過(guò)既然有斷點(diǎn)續(xù)傳那我在地下車(chē)庫(kù)斷網(wǎng)了回家再打開(kāi)APP是不是文件還能繼續(xù)傳答案是除非把上傳狀態(tài)持久化到本地方便APP重啟后恢復(fù)否則做不到。服務(wù)端的續(xù)傳狀態(tài)默認(rèn)是24小時(shí)過(guò)期A(yíng)PP進(jìn)程一旦被殺掉客戶(hù)端持有的分片記錄就丟了重新打開(kāi)APP會(huì)變成全部重傳。解決方案是把前端的分片上傳記錄用Room數(shù)據(jù)庫(kù)持久化重新打開(kāi)APP時(shí)先從本地?cái)?shù)據(jù)庫(kù)恢復(fù)未完成的上傳任務(wù)。這塊邏輯傳統(tǒng)上歸前端管但服務(wù)端要配合提供一個(gè)查詢(xún)已收分片的接口前端才能知道從哪片續(xù)傳。GetMapping(/upload/status/{fileId}) public ResponseEntityUploadStatusVO queryStatus(PathVariable String fileId) { Long uploaded stringRedisTemplate.execute( (RedisCallbackLong) connection - connection.bitCount((UPLOAD_CHUNK_KEY fileId).getBytes()) ); return ResponseEntity.ok(new UploadStatusVO(uploaded, totalChunks)); }6.2 同一文件多人重復(fù)上傳的文件標(biāo)識(shí)沖突巡檢場(chǎng)景里經(jīng)常出現(xiàn)好幾臺(tái)手機(jī)拍到同一個(gè)隱患點(diǎn)生成的視頻內(nèi)容非常相似MD5可能碰巧一致。如果服務(wù)端用MD5作為唯一文件標(biāo)識(shí)就會(huì)誤判成已經(jīng)傳過(guò)了直接返回秒傳成功但文件內(nèi)容是甲拍的隱患點(diǎn)乙的日志里配了一張別人的圖片。解決方式是文件標(biāo)識(shí)用用戶(hù)ID加MD5的復(fù)合標(biāo)識(shí)或者引入U(xiǎn)UID作為主標(biāo)識(shí)、MD5只做文件內(nèi)容的完整性校驗(yàn)不承擔(dān)文件唯一身份的功能。6.3 不要忽略服務(wù)端存儲(chǔ)空間預(yù)檢2GB的文件分片全部落盤(pán)后臨時(shí)目錄的占用會(huì)瞬時(shí)飆升。高峰期幾十個(gè)文件同時(shí)上傳輕輕松松占掉幾十GB空間。我后來(lái)在每次新建上傳任務(wù)時(shí)先做一個(gè)存儲(chǔ)空間預(yù)檢剩余空間低于閾值就直接拒絕新任務(wù)避免中途存儲(chǔ)寫(xiě)滿(mǎn)導(dǎo)致所有任務(wù)全部失敗。File storeDir new File(tempDir); long freeBytes storeDir.getUsableSpace(); if (freeBytes RESERVED_SIZE) { throw new UploadException(存儲(chǔ)空間不足請(qǐng)稍后再試); }這個(gè)邏輯跟斷點(diǎn)續(xù)傳沒(méi)有直接關(guān)系但一個(gè)上傳任務(wù)跑到99%因?yàn)榇疟P(pán)滿(mǎn)了掛掉是最讓人懊惱的失敗方式。先把這種底層隱患堵住斷點(diǎn)續(xù)傳用起來(lái)才踏實(shí)。6.4 巡檢報(bào)告自動(dòng)生成場(chǎng)景里的擴(kuò)展斷點(diǎn)續(xù)傳的另一種用途文件上傳只是第一步。巡檢日志生成后系統(tǒng)還要把照片和視頻打包成PDF或ZIP發(fā)送給安全部門(mén)。這里同樣遇到了超大附件問(wèn)題——一份包含幾百?gòu)埇F(xiàn)場(chǎng)照片的報(bào)告壓縮包動(dòng)輒300MB通過(guò)郵件網(wǎng)關(guān)發(fā)送時(shí)頻繁超時(shí)。后來(lái)我把斷點(diǎn)續(xù)傳的思路反過(guò)來(lái)用在下載側(cè)報(bào)告生成后先持久化到文件服務(wù)器郵件里不放附件只放下載鏈接下載接口支持HTTP Range。這樣即使下載中斷也可以從斷點(diǎn)繼續(xù)拉取和上傳側(cè)的斷點(diǎn)續(xù)傳正好形成閉環(huán)。工程上省掉了郵件網(wǎng)關(guān)的超時(shí)改造用戶(hù)體驗(yàn)還更好了。這個(gè)經(jīng)驗(yàn)可以推廣到所有把大文件從A系統(tǒng)搬到B系統(tǒng)的場(chǎng)景。數(shù)據(jù)搬運(yùn)的速度永遠(yuǎn)受制于最差的那段鏈路與其想方設(shè)法提升鏈路的穩(wěn)定性不如讓搬運(yùn)過(guò)程本身具備從中斷處繼續(xù)的能力。這就是斷點(diǎn)續(xù)傳最本質(zhì)的價(jià)值。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美爱国产综合、| 岛国不卡超碰护士AV在线播放| 色香AV| 欧美在线伊人色| 人人贴人人摸| 91成人无码| 久久超碰av在线| 久久极品一区二区| 欧美1727免费观看视频| 中文操嬖片。| 亚洲欧美日韩夜夜| 天天爽夜夜爽夜夜爽精| 亚洲欧美伦综合| 免费亚洲国产精品久久一区| 老女人碰碰在线碰碰视频| 免费精品99| 日韩中文字幕国产| 91香蕉国产尤物视频| 中文字幕在线第二页| 九九视品黄色| 嗯啊不要在线| 国产四虎在线| 美女超碰978| 你懂得91| 色狠狠色| 美女人妻色网站| 欧美 亚洲 偷拍自拍| 伊人影院综合是一个与深夜成人在线 | 啊啊啊啊在线播放| 精品九九淫乱男| 久操在97| 99超碰网| 9精品久久久久| 一区二区三区色综合| 97色97好| 美女毛片999| 激情综合av| 亚洲精品97在线| 性感女人网页在线观看视频| 艳美熟妇先锋一二三区| 国产超碰97| 国产一区二区在线看| 91美女視頻| 视频在线中文字幕| 精品少妇高潮久久| 色欧洲| 亚州男人天堂| 人人弄人人摸| 黄色在线网站| 亚洲欧美中文日韩视频中国语| 国产精品久久久久久久毛片1| 神马久久久久久伦理片| 欧美性爱一级操| 欧美特大黄一级片片免费| 六月婷婷色综合| 99热97| 日本精品国产视频| 国产国产亚洲一二三久久| 丝袜美腿丝袜| 中国农村熟妇毛片视频| 国产精点久久久成人| 五月天激情四射| 青青欧美在线| 啊啊啊啊啊好舒服视频| 九七超碰人人乐| 亚洲无992tv| 中文字幕中文字幕一区二区| 狠狠综合| 欧美曰韩国产精品| 中文字幕免费看大片| 日本www操操操| 青草视频在线看看看看看看看看看| 久久男人的天堂国产| 中文字幕制服欧美久久一区| 国产女人视频三四五区| 探花一区在线| 久操av在线| 久久内射| 中文字幕一区二区三区视频播放| 超碰国产情侣自拍网| 99re在线视频这里只有精品| 翔田千里A片一区二区| 日韩一性一交一A片俄罗斯| 国模一区二区三区| 久久久一区二区| 欧美成人免费在线观看| 国产激情综合五月久久| 综合网亚洲1| 麻豆天美91| 成年人性爱日韩| 国产美女91视频| 色路综合| 色九月婷婷| 黄网站黄视频网站进入口| 色九九久九九| 国产精品熟女乱伦| 后入福利视频| 无码粉嫩白虎一线天b区| 天天干天天舔| 天天摸夜夜摸| 精品人妻视频入口| 91男女啊啊啊| 97伊人网| 亚州成人a∨| 99久久久| 欧美日韩91| 日本免费一区二区不卡| 丁香五月影院| 丰满少妇一区二区三区免费看| 白嫩国模丰满一二三区| 人妻丝袜肏逼| 97人妻免费中文字幕| 国产盗摄美女如厕大神作品在线观看| 蜜臀久久99精品久久久久电影| 吖在线不卡一区二区国产剧情| 精品久久久久瑟瑟| a v网站在线播放| 亚洲综合伊人| 伊人婷婷五月天| 久久熟女精品不卡一区| 日本 欧美 国产一区| 久久6热精品99视频| 超清福利精品视频在线| 久久久久无码一妻区| 亚洲精品国产熟女| 男人的天堂日本东京热| 亚洲h片在线免费观看| 99re只有精品| 丝袜狂射91| 色天使亚洲综合在线观看| 亚洲97P| 岛国在线国产| 精品国产乱码久久久久久日本公司| 口爆吞精在线观看| 久久精品导航| 97色伦欧美| 大色综合| 偷拍视频青青草在线视频| 吻戏激情性巴克| 欧美熟妇成人一区二区| 欧美日韩国产电影| 香伊人在线| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 这里都是精品在线观看| 青青草福利视频| 免费农村成人少妇人妻Aa一区二区视频| 日韩97| 美腿丝袜高跟网免费视频免费视频| 亚洲欧洲无码bt精品合集| 91伊人影视综合| 先锋色眉乱伦资源| 91视频在线观看18| 乱老熟女一区二区三区| 亚洲精品日日夜夜52| 九九草| 天天碰操中国年青熟妇| 色一色综合网| 人人弄人人摸| www欧美91| 亚洲国产综合久久天堂| 郑州宾馆老熟女露脸啪啪| 超碰在线91| 亚洲五区熟女| 99热18| 成人一级性爱| 国产丝袜美女在线一区| 九九九精品| 欧美青青视频| 欧美黄色图片| 国产美女激情| 婷婷五月在线视频| 岛国黄| 天天92av| 99精品在线| 1区2区3区在线视频| 2020中文在线一区二区三区| 丰满人妻一区二区三区| 果冻传媒A片一二三区| 精精夜夜| 婷婷色在线| 久久九九视频九九视频| 操国产逼| 欧美一级黄色免费专区| 天天色图| 久夜视频| 无码粉嫩白虎一线天b区| 欧美白嫩女HD| 爱干爱射网啊啊啊| 色色亚洲| 黄色AV影视| 国产小视频91| 333kkkk·亚洲com久久| 91天堂色男人的天堂| aaa淫乱视频| 最新加勒比丝袜在线| 啪啪啪精品视频| 1769一区| 无码精品久久| 26uuu最新| 日韩熟女三十乱伦| 成年人网站在线免费观看| 啊啊啊啊啊啊在线| JuliaAnn丝袜熟女系列| 婷婷久久五月综合激情| 风月影院十八禁| 东京热双插| 野狼福利社区| 婷婷爽人人婷婷爽视频| .精品人妻一区二区三| 日韩精品在线视频,日韩精品……| 精品无人区麻豆乱码1区2区图片| 丰满人妻-区二区三区免费看| 国产精品69久久久久久久| 麻豆成人av| 中文字幕人乱码中文字的预防方法 | 大香蕉日亚洲日本亚大 | 狠狠躁伊人中文字幕| 无码人妻丰满熟妇区毛片| 91精品国产乱码| 黄色大香焦1级‘′‘| 人人操人人干网页| 色青青久久影视| 在线啊v一区| 欧美一级黄片免费播放| caorenqi shipin| 婷婷久草一区二区三区| 91美乳| 日本天天干天天搞一区| 激情情色五月天| 18+91网站| 2017大香蕉| 久操91视频| 欧美黄片免费在线观看视频| 一区二区你上我| 美女露胸露奶头| 欧美熟妇操操视频| 欧美亚洲特P| 家庭乱伦国产| 91操碰| 色女99一级片在线观看| 天海翼久久| 综合亚洲欧美| 人人潮人人摸| 婷婷在线播放| 日韩欧亚中文在线| 精品欧美乱码久| 日本韩国国产精品一区| 美国一区二区免费视频| 精品国产乱码久久久久久影片| 成人AV素股で擦久久| 国产精品天干天干综合网麻豆| 天天性射网| 日韩无码一级黄色av片| 人人干人人搞人人摸| 欧美天天插| 国产日韩欧美| 乱伦强奸区日韩| 一级特级aaaa毛片免费观看 | 天天综合网~91| 亚洲无码国产探花在线观看| 9久精品| 精品人妻视频一区二区三区蜜桃视频| 淫纸中9区| 三级精品三级在线观看| 亚洲中文制服诱惑| 大香蕉淫人网| 九九亚洲视频| 懂色av中文字幕一区二区三区天美| 97碰久久| 激情五月天色播| 狠操91,com| 91免费看一区二区三区| 99综合| 粉嫩久久久极品| 在线毛片片免费观看| 伊人久久婷婷| 91精品少妇搡搡搡| 日日日日做夜夜夜夜无码| 无码99| 亚洲欧美伦综合| 成人免费福利网站国产| 日韩av情韩国爱禁区av一区二区| 欧美黄色片在线播放| 久久这里都是精品| 97超碰欧美中文字幕| 无码视频黄色网战| 亚洲天天精品| 日本 欧美 国产一区| 久久噜| 国产精品亚洲一级av第二区| 91丝袜激情在线 | 欧美韩国你懂得在线 | 97超碰超碰| 久久怡红院| 啊啊啊好大好深| 色综合尤物| 久草成人影片| 人人操人人狠狠操| sewuyueav| av一区二区三区 中文| 国产丝袜高跟美女av免费观看| 中国国产精品一区视频| 日日骚 av| 99热这里都是精品| 91|九色|国产熟女| 欧美激情精品久久久| 亚洲 自拍偷拍 欧美| 美女啪欧美一区| 日韩激情毛片一级久久久| 北京美女一区二区| 丝袜熟女一区二区三区| 精品在线78| 吻戏激情性巴克| 亚洲精品国产精品成人| 亚洲欧美日韩国产丝袜自拍中文| 干婷婷综合网| 在线观看一卡二卡| 操人人| 欧美暴力猛交| 五月天色图| 啊啊啊啊啊在线| 伊人久久国产免费观看视频| 欧美成人A天堂片在线观看| 麻豆a'v电影| 91人妻PORNY九色大屁股| 亚洲黄色| 超碰地址97| 婷婷五月天av| 嗯啊视频免费在线观看| 嗯嗯啊啊操我| 久久网亚洲| 高凊专区人人操| 成人激情无码在线视频| 丰满人妻一区二区三区| 天天日美女的B| 久久人妻视频| 婷婷爽人人婷婷爽视频| 欧美成人9797| 91GD.COM| 日本性爰一道本| 人乳av| 中文字幕一区二区三区蜜臀| 秋霞视频一区二区 | 日本成a人v网站在线观看| 中文久久96| 久久亚洲不卡| 亚洲丝袜二区在线| 99xav| 91蜜臀熟女| 成人三级片无码| 日韩黄片影院| 久久大黄片| 2017天天操天天日| 精品大全99999| 日韩天堂av电影在线观看| 成人免费福利网站国产| 色哟哟综合| 久久女人| 人妻精品一区二区| 很狠操| 婷婷探花久久精品一区| 丰满美女一级毛片在线播放| 久久精品电影在线| 超碰97人妻自拍| 国产偷人妻精品一区二区在线| 日本久操视频| 熟女丰满人妻一区| 久久久久13| 探花精品视频| 新版天堂中文资源8在线| 国产成人无码a| 无码一区免费在线不卡| 狠狠操使劲操| 国产在线综合网| 日韩熟女精一区二区三区不卡| 果冻传媒一区二区三区| 久久久久国产| 国产精品大屁股999| 天天综合网AV91| 久久曰曰| 日韩精品第3页| 亚洲 欧美 小说| 亚洲 图片 欧美 色图| 中文字暮97| 亚洲免费精品一区| 亚洲天堂另类小说男人| 久久超碰、| 亚洲欧美日产国产91毛片| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久操精品网| 国产剧情AV不卡在线观看| 久久社区一区二区三区| 亚洲av影院在线观看| 强奸乱伦日韩AV| 抽插无码高清一区| 天天爱天天操| 亚洲。日韩。欧美| 亚洲欧美一区二区不卡视频播放| 日日夜夜模| 久久r精品| 久久三区四区| A片大香蕉在线| 日日夜夜精品| 99热亚洲| 美女的肌被草喷水视频| 精品少妇人妻| 亚洲影视综合| 欧美大香蕉同搞| 中文字幕av乱伦| 久久亚洲不卡| 国产又大又粗又长视频| 精品福利| 亚洲第一狼人丝袜美女另类 | 激情小说亚洲图片| 亚洲情色 欧美| 在线播放成人高清免费视频| 国产亲戚伦亲在线| 爱爱动态试试看6 0秒| 国产情色第一第二页在线观看| 91麻豆天美国产欧美高潮| 男人天堂资源| 亚洲色色探花| 黑丝少妇麻豆| 久热99999| 伊人国产成人av网站| 日韩久久.一级黄色片| 五月丁香狠狠爱| 欧美日韩大陆黑人少妇99| 欧美图片校园春色| 少妇无码av专区线| 99国产在线绯色一区| 人妻人久久精品中文字幕| 91香蕉国产尤物视频| 亚洲暴力强奸AV| 亚洲人精| 国产免费小视频| 国产乱色国产精品免费视| 大香蕉伊人久久| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 天天操人人操狠狠插| 久久久久久欧美精品se一二三四| 国产精品久久久777| 色香av| 国产精品蜜乳AV| 欧美狠狠弄| 青娱乐黄色录像| 强歼乱伦资源网| 久久 亚洲 日韩 人妻| 欧美97色| 看一级黄色视频| 久操网在线| 日韩偷拍一区二区三区| 亚洲天堂人妻一区二区| 91国产丝袜白虎| 欧美日韩激情无码专区| 日韩精品9区| 亚洲国产精品成人综合| 超碰性爱97| 国产成人亚洲精品无| 色5月婷婷| 国产97综合| 操B在线观看| 强奸熟女一区二区三区| 一区二区三区黄色片a| 丝袜综合色图| 琪琪精品免费一区二区三区| 精品97精品97| 欧美色性爱| 亚洲日韩熟女人妻高清在线| 国产高清在线观看欧美| 色香伊人| 亚洲AV无码国产成人| 久久精品日韩专区免费观看| 人人透人人操| 欧美综合网1| 蜜乳AV免费观看| 330Dv国产女人终合视频极品人与兽 | 99久久久无码国产精品性男| 国产99999久久精品| 天天色天天干天天射| 性性久久| 日本熟妇人妻中出视频| 亚洲综合色图欧美| 久操黄色视频| 老熟妇一区二区三区…| 欧美桃色网| 丁香五月激情网| 日本综合色图| 国产精品久久久777| 国产AV激情无码久久无码| 97操综合| 美女超碰978| 午夜福利1区2区3区| 亚洲性综合| 丁香五月天堂网| 丁香六月天| 黑人免费福利视频| 成人精品欧洲亚洲| 天天干天天干天天干| 91性色| 日韩少妇无吗| 日韩AV片| 国产精品呦一区二区三区| 综合亚洲网| 玖玖蜜臀资源网| 在线观看精品国产免费| 91精品国产91综合久久蜜臀| 97在线观看免费视频l| 在线中文字幕极品av| 殴美性天天| 91欧美美女日韩国产婷婷| 亚洲最大的综合性av| 日韩欧美加勒比| 亚洲男人的天堂在线看| 超踫中文字幕| 国产一区二区欧美日本| 色欲天天婬色婬香WWW夜色| 国产不卡的视频| 国产精选三级在线观看| 99久久久| 午夜精品久久久久久久| 天天日日本| 91天堂色男人的天堂| 亚洲色天| 亚洲综合伊人无码久久| 长久操视频| 大香蕉伊人亚洲| 久99热| 26uuu性物| 69国产对白刺激| 日本大香蕉综合网红本杳社区| 啊啊啊啊啊啊啊啊啊啊在线观看| 美女露胸露屁股| 伊人宅男大香蕉| 色哟哟av网址| 秋霞一区二区三区四区五区六区七区| 96精品在线| 伊人久久婷婷| 激情综合五月| 欧美 亚洲 偷拍自拍| 亚洲成人性| 国产精品午夜福利亚洲综合网| 熟女精品日韩一区二区三区| 91在线丝袜| 天天日美女的B| 啊啊啊不要好爽日韩无码一区| 麻豆天美国美国产| 亚洲男人天堂Av| 婷婷综合五月| 97天堂| 婷婷五月色| 九月色婷婷| 超碰国产在线| 人妻AV 中文字幕的| 成人精品在线| 亚洲天堂,男人| 69人妻精品一区二区绯色| 五月婷在线| 99性爱| 日韩三四五区| 操九九九九九九| 毛片17S| 色五月第四色| 国产精品久久久久久久免牛肉蒲团| 妇人噜噜| 人人九九精| 国产嫩草精品A88AV| 国产9熟妇视频网站| 9久久久久久| 日本天天干天天操一区| 男啪女色黄无遮挡免费观看| 日B操| 思思热国产在线视频| 顶级丝袜熟女一区二区三区| 少妇高潮一区二区三区在线| 玖玖综合网| 午夜男女爽爽大片免费观看| 草草影院最新网址| 亚洲综合中文字幕有码| 亚洲精品一区中文字幕乱码| 国产白领连续中出在线观看| 亚洲日产专区婷婷| 精品久久久一本一道| 亚洲熟女人妻中文字幕一区二区| 亚洲欧美日韩免费观看| 淫荡熟女乱伦网| 狼人久草| 九九九久久久久| 骚日日av| 欧美性爱第一页久久| 成年女人黄网站| 五月婷婷激情网| 亚洲淫乱骚妇AV| 精品一区99999| 少妇久久久久久| 乳欲人妻办公室奶水| 狠狠狠狠狠狠| 大香蕉琪琪日本女优不卡| 久久老熟女| 精品人妻1区| 99操碰| 日韩精品怡红院| 91老司机视频| 午夜精品五区| 人人色人人射人人妻| 熟妇高潮二区三区| 中文字幕日韩精品久久| 六月激情婷婷| 欧美大片天天看| 亚洲欧美另类小说| 日韩精品亚洲专区在线影视| 中文字幕加勒比海高清无码免费视频 | 国产日韩久久| 牛黄色久午久| 天堂网 主播 亚洲| 强被迫伦姧在线观看无码网站| 五月天激情影院| 久久九精品| 美日韩男女操屄视频| 操操AV电影| 欧美啪啪天堂| 操逼视频亚洲| 蜜臀久久久国产| 翔田千里A片一区二区| 九九色综合| 好一吊区二区| 中国国国产一级特黄毛片| 玖玖爱综合| 久久免费少妇| 屌逼麻豆| 91人妻人人澡人人爽人人精品| 欧美性爱伊人| 日韩欧美天堂| 全免费a敌肛交毛片免费| 欧美国产有色电影| AV和黑人在线播放| 一区| 天天色,天天干,天天干| 女人的天堂大香蕉网| 韩美日操逼| 日韩一999精品| 大学生美女口爆| 欧美性爱97超碰| 天久久久噜噜噜久久国产精品爽爽| 久操热线| 91 丝袜在线播放| 欧美亚洲国内自拍| 日韩三级在线观看网站| 伊人久久国产免费观看视频| 久久久久亚洲熟妇熟女| 九九热超碰97亚洲最新香蕉| 亚洲密乳AV| 人妻无码久久一区二区三区免费| 一类无码操逼视频| 日韩av情韩国爱禁区av一区二区| 国产三级日产三级韩国三级| 久久人妻一区二区三区高清| www.色婷婷色综合| 777超碰| 天堂九九九九九九九九九| 在线午夜成人无码视频| 97在线欧洲| 操逼无码一区| 天天天干977| 亚洲骚女一区二区三区| WWW操逼| 97超色| 五月天偷拍| 亚洲性爱成人| 春色综合免费| 人妻久热在线| 亚洲一级特黄大片在线播放91| 女人天堂网| 日韩乱码Av| 中日亚韩免费视频| 亚洲少妇综合| 日本精品中文字幕视频| 曰韩少妇无码| 青草青青久久久久久国产| 99久久久久久亚洲精品不卡| 蜜桃臀AV在线| 欧美大香蕉在线观看| 思思热国产在线视频| 亚洲男人在线观看天堂| 台湾大香蕉99热| 国产免费永久精品无码| 亚洲欧美日韩制服另类| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 国产农村妇女精品1区二区| 色官网色综合| 欧美色图综合| 国产91丝袜在线播放蜜月| 日韩三四五区| 操逼逼无码| 日韩欧美福利视频看看| 偷拍亚洲视频一区二区三区四区| 亚洲欧美九九九| 欧美婷婷五月天| 国产最火爆久久国产网站网站| 自拍啪啪视频| 日韩美女高潮喷水视频| 久久久草成人网站久久久草成人久久久草久久久 | 一本久久久精品| 亚洲中文字幕日产无码久久| 久碰视频| 欧亚性爱视频免费看| 欧美不卡在线一区二区| 久草这里只有精品| 青青草一区二区三区四| 久久av网| 人妻久热在线| 亚洲综合另类| 日韩精品视频在线观看一卡二卡| 18禁无码永久免费无限制| 欧美日韩色| 综合情欲网| 青青草色插素人| 一区二区三区日韩欧美| 男人天堂久久精品| 色婷婷小说| 五月丁香社区婷婷日韩欧美精品影院| 岛国免费视频在线| 啊啊啊啊啊啊啊啊在线观看| 在线观看啊啊啊啊啊| 一区二三区四区视频大全套| 婷婷情色五月天| 欧美熟妇乱码在线一区| 亚洲夜色在线| 人人乐大香蕉| 吻戏激情性巴克| 色婷婷丁香五月天| 久操热线| 亚洲激情综合| 天天弄天天操| 欧美后进式| 久久久蜜桃一区二区三区| 91久久婷婷| 丁香五月综合| 九九色色| 久久9精品视频| 久久这里精品国产99丫e6| 午夜精品99久久久久传媒| 蜜桃视频精品一区二区| 欧美黑人猛交春色影视大全| 女同在线视频一区| 狠狠操狠狠操操| 免费一二区| 国产在线能看的你懂的| 久久久久亚洲熟妇熟女| 一级日本牲交大片好爽在线看| 国产美女裸体秘 永久无遮挡| 久久久久久久九九九九九九| 国产精品区在线12p| 一本大道不卡一二三区| 久久久久国产精品喷潮免费观看臀| 97欧美性爱| 色婷婷网| 国产伦精品免编号公布| 天天综合有色网| 91AV天堂| 日本三级精品| 立川理惠被中出无码| 欧美性爱免费短视频| 日韩性爱再线视频| 色欧美天天| 久久久久密臀一区二区| 久久精品成人一区二区三区蜜臀 | 超碰人人色| 久久熟女人| 欧美人妻中出| 精品日日人妻| 蜜乳成人AV| 欧美特大黄一级片片免费| 亚洲欧美精品一区天堂久久 | 日韩一级二级在线| 中文字幕乱偷人妻久久艾草网| 天天摸天天操视频| 日本潮催一卡操| 国产成人免费观看在线视频| 欧美亚洲综合色| 欧美熟妇亚洲版| 久久久91| 国产自产自拍| 91婷婷伊人狠人| 亚洲drav色图| 亚洲国产精品久久AV| 日韩精品黄片免费观看| 麻豆天美国美国产| 夜夜操夜夜高潮夜夜爽国产精品区| 试看60秒 爽| 久久一级无码精品毛片6| 中文字幕丰满人妻日本| 人人操人人操草草| 91偷拍欧美亚洲| 欧姜老司机| 日韩视频啪啪| 熟女自慰久久久| 人妻天堂三区| 亚洲综合中文字幕有码| 婷婷五月天久久精品视频一区二区三区 | 美女久久久久久久久久久| 成年人黄色小视频网站| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 婷婷伊人网| 久久久111| 乱伦一二三| 激情文学网伊人| 久久久久九九九九九| 高清国产性猛交xxxx乱大交| 成年女人一区| 一二三区精品视频| 亚洲国产精品成人综合| www.91色综合| 中文字幕av色| 久久久不能久久久久| 国产精品熟妇一区二区三| 性感美女啊啊啊在线| 亚洲天堂五月天国产| 另类图片五月| 夜夜欢天天干| 狠狠爱综合网| 无码二级三级| 国产精品久久久三级无码| 久久草视频污视频| 亚洲免费成人在线高清无码视频 | 夫妻AV网站| 中文操嬖片。| 天天色踪合| 强奸乱伦Av网| 亚洲熟久久| 美女午夜福利免费视频| 99蜜桃臀亚洲成人在线观看| 国产丝袜欧美在线视频| 欧美日韩222| 日韩精品中文字幕人妻| 熟妇人妻一区二区| 一中国女人毛片水真多| 啊嗯好大视频在线观看| 青青操网| 九九九久久久久| 俄罗斯一区二区视频在线观看| 欧美精品偷拍| 国产亚洲女v在线观看| 欧美精品久久| 5278欧美一区二区三区| 国产丁香精品露脸视频| 91狠狠综合久久久久久| 久久久久久久唑| 在线观看十八禁| 人妻9117c| 久久九精品| 久久欧美性爱视频| 人爽不卡视频| 亚洲综合888| 人人人人插| 中文字幕免费在线观看| 懂色AV一区二区三区| 日本在线观看网址| 国产精品视频在线播放 | 骚货操死你| 四虎影库国产精品免费| 天天懆天天日| 日韩青久久| 九九热男人天堂| 26uuu性物| 日韩三级av片| 国产乱弄免费在线视频。| 奇米狠999| 欧美日韩精品久久久久久久久东北老熟妇| 夜夜爽77777| 亚洲精品一区二区精品| 欧美亚洲清纯| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 78m成人视线| 精品熟女一区=区三区| 免费一级精品啪啪视频| 精品美女少妇一区二区| 玖玖爱综合| 亚洲 欧美 手机在线观看| 97欧美精品| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 五月天我淫我色av| 99在线啪| 亚洲AV乱码专区国产噜噜亚洲| 天天操天天干一区二区 | 亚洲一区二区中文字幕| 精品人妻一区二区三区在| 亚州高清色综合| 狠狠操夜夜操蜜桃视频三区| 国产毛片在线| 97综合久久| 国产超碰97| 日日夜夜噜| 97人妻色| 黄片不用下载在线观看| 无码动漫av中文字幕| 校园春色美腿丝袜 | 看看日B真人视频| 欧洲天天在线| 色官网在线| 91精品久久久| 91这里只有精品| 精品丰满熟妇人妻一区| 人人爽人人精品乱人伦AV| 97中文天堂| 九九黄色网| 无色无码| xxxx网站亚洲精品| 亚洲中字幕日本一区二区三区 | 国产刺激视频| 久久精品色欧美aⅴ一区二区| 国产成年女人免费视频播放a| 亚洲精品99999| 久久久久久十| 97在线观看视频| 少妇内射视频| av东京热男人的天堂| 老熟女区| 日韩一999精品| 超碰97欧美在线 | 日韩特级毛片免费观看全集| 国产精品久久久亚洲第一牛牛_在线观看| 97在线青| 欧美在线色| 精品999日本| 大香网伊人久久综合网eew| 久久色激情一区二区三区| 天天爽爽爽爽| 色97| 97二区四区| 神马久久久久眼| 久久天天摸| 天天影视综合网欧美精品| 可以看的av| 婷婷在线播放| 国模限制级电影| 天天干2019| 亚洲国产剧情少妇激情| 天堂日本亚洲欧美| 欧美亚洲一区二区久久久婷精品大包诱| 碰碰在线视频| www.操| 啊啊啊啊啊在线视频| 天堂麻豆天美| 成人黄页| 欧美日韩国产色五月综合在线| 伊人午夜福利视频| 一二三四区操操Av| 中文字幕激情小说| 久久精品人妻一区| 无码高清少妇久久| 欧美经典一区二区三区| www黄片免费看com| 欧美一区二区三区日韩| 婷婷五月天激情小说| 曰韩欧美国产传媒麻豆第一区| 91精品国产综合久久久蜜臀| 亚洲97P| 亚洲性综合| 欧美高清91| 国产无码精品久久久久久| 精品日韩中文在线| 人人干人人搞人人摸| 丁香五月av| 国产白嫩精品久久| 是还免费视频1727我| 青青草这里只有精品| 久久永久无码人妻视频| 亚洲图片日本AⅤ欧美在线| 在线强奷到舒服的无码视频| 色久综合| 欧美在线大香蕉| 97国产中文| 操逼网站网站| 国产懂色精品国产av| 久久人妻丝袜一区二区三| 天天舔九色婷婷| 成人情色综合网| 欧美极品美女aaaaaa级黄片| 色哟哟511老熟女| 超91综合网| 在线亚洲丝袜视频网站| 欧美高清色| 国产精品女生av| 99热精品免费| 99只有精品| 亚州性9| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 91一起操| 97色视频在线| 久久黄人人爽视频| 熟女五十路一区二区三| 精品久久久久久亚洲| 国产在线精品电影观看| 亚洲日韩天堂| 日韩av在线播放不卡| 大香蕉伊人在线成人AV在线观看| 久草色在线观看| 日本黄色大片一级视频免费麻豆| 久久精彩视频| 日韩黄色小说| 亚洲精品尤物yw在线影院| 欧美国产日韩清纯唯美| 视频二区熟女人妻| 日本高清视频xxxx| 美女啊啊啊啊啊啊啊| 黄站在线免费观看| 2019久久久久久久久福利| 97视频网站在线观看| 91热热色| 人人做人人妻人人夜视频| 色欲人妻一区二区在线| 蜜臀久久99精品久久久久| 亚洲最大网站av| 欧美 牲| 人人干黄色| 日本少妇va7777| 天天cao在线| 人妻精品视频一区二区| 高清肉丝中文无码| 国产在线激情视频| 青青草伊人久久| 秋霞Av理论一级在线| 嗯嗯啊中文字幕| 久久久啊啊啊| 久热大香蕉| 精品二区久久| 亚洲欧美日韩夜夜| 久久久久久久久国产| 色官网色综合| 很很很很操| 中文字幕一区二区日韩网| 欧美亚洲影视| 丰满美女一级毛片在线播放| 福利风月五月天影院| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 九九草| 免费观看有码高清视频| 9Ⅰ超碰| 嗯啊不要啊在线 | 丝袜性亚洲| 少妇熟女1区2区3区| 欧美日日夜夜| 97人人夜夜精品视频| 久久一二三四不卡| 精品国产一区二区三区四区在线看 | 91男人天堂网| 精品毛片久久久精品毛片| 男女香蕉一区二区| 国产农村一一级特黄毛片| 久久97视频| Av色五月| 亚洲国产av中文字幕久久| 人人爽人人精品乱人伦AV| 亚洲国产麻豆一区二区三区| 中文字幕色AV| 久久久一区二区三区四曲免费听 | www五月| 91人妻在线视频| 97色诱| 岛园激情| 伊人加勒比| 欧亚日韩三区| 色色色色网站| 91处女在线观看| 精品网站99999| 久久东京国产精品视频| 97超碰欧美中文字幕| 久久男人网| 搡老熟女老女人老熟妇免费视频| 蜜臀AV一区二区三区| juliaann精品熟女一区| 日韩久久.一级黄色片| 国产日韩美女小穴视频网站不卡| 一区二区三区 丝袜 高跟 美腿| 高清无码在线播放网站| 久久久无码精品人妻二区| 成人AV素股で擦久久| 中日韩久久久| 999精品久久久久久久| 精品国产72| 丁香五月影院| 国产强奸乱伦xd| 中文字幕激情小说| 久久精品72| wwwss在线观看| 中文人妻av高清一区| 哈哈操 大香蕉| 操B久久| 激情五月天色播| 手机在线A片| 91色拍| 精品一区99999| 中文有码第五页| 久久九色| 很黄很色的视频在线观看| 91天堂网| 97超碰色中文字幕| 色爱综合网欧美| 五月丁香六月婷| 亚洲精品啪视频| 国产无码三级视频在线观看| 暴力av在线| 免费超碰97久久| 亚洲宗合电影| 麻豆国产尤物AV| 色噜噜人妻丝袜a∨先锋影| 成人无码在线视频网站| 精品国产乱码久久久久久蜜臀| 亚洲色图综合网| 激情图片亚洲色图| 亚洲图片欧美91N| 欧美日韩99| 久久久久久精品免费看A级| 99re免费视频精品全部| 久久久久国产精品久久久| 国产91丝袜 在线播放| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 久久精品中文| 欧美狠狠弄| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 免费中文在线| 无套内射人妻在线播放| 久久国产AⅤ| 中文字幕三四区| 992视频一区| 欧美97免费| 福利五区| 国产女主播视频在线观看| 啊啊啊啊啊啊啊啊啊啊在线观看| 熟妇一区二区三区| 不卡九肏| 一区二区三区四区五区高清无码永久视频 | 狠狠欧美| 五月天综合网| 99欧美| 99色色| 91熟女熟妇视频网站| 后入综合久久| 亚洲欧洲综合成人av一区| 中国AAAAAA黄色片| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | AV在线资源| 久久綜合很很很| 97久久久精品| 色娱乐色呦呦夜夜夜夜av| 欧美性爱一区| 91色伦综合| 91人妻久久久久久久久久久久久| 亚洲日韩乱码中文无码蜜桃臀网站 | 色99久草| 国产97色在线 | 亚洲| 欧中美三级一区二区三区| 国产丝袜啪啪| 999精品久久久久久久| 蜜臀久久99精品久久久久久无删减| 久久超碰97| 国内毛片热久久思思热| www亚洲免费| 一,爱啪啪,在线免费视频|