久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

分片上傳實戰(zhàn)指南:解決大文件傳輸難題,實現(xiàn)斷點續(xù)傳與秒傳

分片上傳實戰(zhàn)指南:解決大文件傳輸難題,實現(xiàn)斷點續(xù)傳與秒傳 1. 整車廠大附件到底有多大被附件拖垮的供應(yīng)商門戶去年我給一家汽車制造企業(yè)做供應(yīng)商門戶的附件模塊改造真正觸發(fā)這次改造的是一通來自工藝部門的電話。對方語氣很急一個3.5GB的焊裝線改造仿真視頻傳到73%斷了重傳一次到50%又崩了瀏覽器直接白屏再點上傳按鈕毫無反應(yīng)。這不是個例。整車廠和供應(yīng)商之間每天流轉(zhuǎn)的文件體積早就超出普通網(wǎng)頁上傳能承受的范疇。我翻了后臺日志把過去一個月上傳失敗的文件做了個統(tǒng)計發(fā)現(xiàn)超過1GB的文件失敗率高達四成失敗原因幾乎都是網(wǎng)絡(luò)中斷、請求超時、瀏覽器內(nèi)存溢出這老三樣。最夸張的一條記錄里同一個2.8GB的檢測報告被供應(yīng)商傳了11次才成功。1.1 一組真實的文件體量數(shù)據(jù)汽車制造場景里的大附件不是我們平時理解的幾百MB而是以GB為單位的龐然大物。我整理了一下那家企業(yè)在供應(yīng)商門戶、研發(fā)協(xié)同平臺、質(zhì)量追溯系統(tǒng)里經(jīng)常出現(xiàn)的附件類型大概是這么個量級文件類型典型體量產(chǎn)生環(huán)節(jié)上傳方向CAD數(shù)模Catia/UG500MB - 3GB產(chǎn)品設(shè)計供應(yīng)商 → 主機廠焊裝線仿真視頻1GB - 6GB工藝驗證供應(yīng)商 → 主機廠路試車載視頻500MB - 8GB質(zhì)量測試測試部門內(nèi)部PPAP整套提交包200MB - 1.5GB生產(chǎn)件批準供應(yīng)商 → 主機廠BOM清單與檢測報告50MB - 800MB采購與質(zhì)檢供應(yīng)商 → 主機廠這些文件有很多共同特征周期緊當天必須交付網(wǎng)絡(luò)環(huán)境不可控供應(yīng)商那邊可能是跨國專線也可能是普通寬帶文件本身是企業(yè)核心數(shù)據(jù)不容丟失。1.2 為什么普通上傳方案在制造場景必然翻車很多人覺得大附件傳不上去是后端服務(wù)器或者帶寬的問題其實第一道坎在瀏覽器。傳統(tǒng)的input typefile配合表單提交瀏覽器會先把整個文件讀進內(nèi)存再發(fā)請求。一個3GB的文件先不說用戶要等多久Chrome在32位系統(tǒng)下單進程內(nèi)存上限都不夠用直接白屏太正常了。就算文件勉強讀進去了一個POST請求把幾GB數(shù)據(jù)一次推給后端中間經(jīng)過Nginx、網(wǎng)關(guān)、應(yīng)用服務(wù)器任何一個環(huán)節(jié)的超時時間設(shè)置都會成為斷點。請求斷了就得從頭再來沒有任何挽回余地。汽車行業(yè)的供應(yīng)商網(wǎng)絡(luò)質(zhì)量參差不齊跨境傳輸時丟包率稍高大請求基本必斷。這就引出分片上傳的核心思路不跟大文件正面硬剛把它切成幾十上百個小塊每個小塊獨立上傳。小塊傳輸天然抗網(wǎng)絡(luò)抖動失敗只需要重傳那一個小塊而不是整個文件。加上并發(fā)控制、斷點續(xù)傳、秒傳校驗才能保證幾個GB的文件在弱網(wǎng)環(huán)境下也能完整落到服務(wù)器。2. 分片上傳的核心邏輯把3.5GB拆成700份再逐個擊破分片上傳不是什么新概念早年網(wǎng)盤就是這么干的。但制造業(yè)門戶跟消費級網(wǎng)盤不一樣它要考慮文件權(quán)限、審計、與工單系統(tǒng)的關(guān)聯(lián)以及供應(yīng)商和主機廠之間的網(wǎng)絡(luò)現(xiàn)實。下面我把這套邏輯拆開講清楚理解了再去看源碼自己改起來才不慌。2.1 分片上傳的整體流程一次完整的分片上傳包含七個階段前端讀取文件計算MD5指紋調(diào)用初始化接口把文件名、大小、總分片數(shù)、MD5交給后端拿到文件唯一ID后端拿到MD5后先查重如果庫里已有相同指紋的文件直接返回秒傳完成不走后續(xù)流程前端按固定大小切分文件生成分片序號前端把分片并發(fā)上傳每傳完一片后端落盤并記錄所有分片傳完后前端調(diào)用合并接口后端把臨時分片按順序拼成完整文件校驗合并后的文件MD5核對大小標記上傳完成。在這個流程里分片只是手段不是目的。真正要解決的是兩個問題單次請求體量可控以及失敗后最小成本重試。2.2 秒傳與斷點續(xù)傳MD5在這里的真正作用很多人以為MD5是用來校驗文件完整性的在分片上傳里它的首要作用是去重。供應(yīng)商第二次提交同一個檢測報告前端算出MD5以后后端一查指紋一樣直接告訴前端不用傳了文件已經(jīng)有了上傳進度條一秒拉滿。汽車行業(yè)里同一份PPAP包改來改去、反復提交的情況太多了這一招能省掉大量無效傳輸。斷點續(xù)傳的邏輯更直接。前端每次開始上傳前調(diào)用一次查詢已上傳分片接口后端返回已落盤的分片序號列表前端只把缺失的分片補傳。這樣哪怕傳了一半電腦斷電、瀏覽器崩潰重新打開頁面選同一個文件秒進續(xù)傳狀態(tài)而不是從頭再來。2.3 并發(fā)數(shù)和分片大小的選擇邏輯分片大小和并發(fā)數(shù)是整個方案里最需要權(quán)衡的兩個參數(shù)。切得太小分片數(shù)量暴增請求次數(shù)多了后端壓力大而且每個請求都有TCP握手和HTTP頭開銷總耗時反而變長。切得太大單個請求又回到了大請求容易斷的老問題。我在這套系統(tǒng)里用的是5MB一片并發(fā)3個請求。算一下3.5GB 3584MB正好切714片默認帶寬下并發(fā)3路每片獨立確認整體進度只增不減。并發(fā)數(shù)為什么是3而不是10因為瀏覽器對同一域名的TCP連接默認限制是6個如果前端還有其他接口要調(diào)用占滿連接池會導致頁面其他請求排隊等待。留3個連接給普通接口調(diào)用上傳占3個是綜合體驗最穩(wěn)的配比。3. 前端源碼實現(xiàn)切片、并發(fā)池、進度與重試前端這部分我直接貼核心代碼基于原生JavaScript實現(xiàn)不依賴框架你把它接進Vue、React或者單純的jQuery頁面都能用。先說明一下整體結(jié)構(gòu)File切片用File.slice()MD5計算用SparkedMD5庫并發(fā)控制自己寫一個簡單的請求池不用第三方庫方便理解也方便改。3.1 文件的讀取與分片切片本身特別簡單但要注意分片序號必須補零。后面合并時要按字典序排序如果不補零10會排在2前面文件順序就亂了。const CHUNK_SIZE 5 * 1024 * 1024; // 5MB function createChunks(file) { const count Math.ceil(file.size / CHUNK_SIZE); const chunks []; for (let i 0; i count; i) { const start i * CHUNK_SIZE; const end Math.min(start CHUNK_SIZE, file.size); chunks.push({ index: i, indexStr: String(i).padStart(6, 0), // 補零保證排序正確 blob: file.slice(start, end) }); } return chunks; }padStart(6, 0)這行是關(guān)鍵別省。700多片最多三位數(shù)補6位是為了以后超大文件擴展時不用改代碼。切完以后每個分片就是一個獨立的小Blob對象5MB的小塊發(fā)給后端資源占用完全可控。3.2 MD5指紋計算用Web Worker避免卡死頁面計算3.5GB文件的MD5不是瞬間的事在純前端主線程里算會導致頁面卡頓用戶以為瀏覽器死了。解決方案是把計算丟到Web Worker里。我用的是SparkMD5的增量計算模式逐片讀取文件邊讀邊算不把整個文件加載進內(nèi)存。// worker.js importScripts(spark-md5.min.js); self.onmessage function(e) { const file e.data.file; const chunkSize e.data.chunkSize; const spark new SparkMD5.ArrayBuffer(); let offset 0; const total file.size; function readNext() { if (offset total) { const hex spark.end(); self.postMessage({ type: done, hex }); return; } const blob file.slice(offset, Math.min(offset chunkSize, total)); const reader new FileReader(); reader.onload function(event) { spark.append(event.target.result); offset event.target.result.byteLength; // 每算完一塊匯報一次進度 self.postMessage({ type: progress, percent: Math.round(offset / total * 100) }); readNext(); }; reader.readAsArrayBuffer(blob); } readNext(); };主線程那邊只需要function calcFileMD5(file) { return new Promise((resolve, reject) { const worker new Worker(worker.js); worker.postMessage({ file, chunkSize: CHUNK_SIZE }); worker.onmessage (e) { if (e.data.type progress) { updateHashProgress(e.data.percent); // 展示正在校驗文件提示條 } else if (e.data.type done) { worker.terminate(); resolve(e.data.hex); } }; worker.onerror reject; }); }3GB的文件用這種方式算MD5大概需要20到40秒取決于CPU性能。體驗上要給用戶明確反饋不然用戶以為卡死了直接把頁面關(guān)了。3.3 請求并發(fā)池的實現(xiàn)并發(fā)池是前端控制上傳節(jié)奏的核心。它的作用是同時最多跑3個上傳請求一個完成了馬上從待上傳隊列里拿下一個補上。這樣不會把瀏覽器連接池占滿也能保證進度條平滑前移。async function uploadChunks(chunks, fileId, onProgress) { const concurrency 3; const queue [...chunks]; const results new Array(chunks.length); let completed 0; async function worker() { while (queue.length 0) { const chunk queue.shift(); const formData new FormData(); formData.append(fileId, fileId); formData.append(chunkIndex, chunk.indexStr); formData.append(chunk, chunk.blob); try { await axios.post(/api/upload/chunk, formData, { timeout: 120000, // 單分片超時2分鐘 onUploadProgress: () {} }); results[chunk.index] true; completed; onProgress(Math.round(completed / chunks.length * 100)); } catch (err) { // 單片失敗重試3次仍然失敗就中斷并拋出 await retryUpload(chunk, fileId, 3); completed; onProgress(Math.round(completed / chunks.length * 100)); } } } const workers []; for (let i 0; i concurrency; i) { workers.push(worker()); } await Promise.all(workers); return results; }這里注意一個細節(jié)單分片超時設(shè)置成了2分鐘。5MB的分片哪怕是撥號網(wǎng)絡(luò)也不該傳2分鐘設(shè)置這個值的意義是防止某個請求卡死導致并發(fā)池里的worker永遠不釋放拖慢整個隊列。超時后主動失敗觸發(fā)重試邏輯新的請求會重新加入排隊。3.4 進度的精確計算進度條不應(yīng)該是某一片正在傳就顯示那一小段的百分比而是以已成功落盤的分片數(shù)量為準。每成功一片進度 成功片數(shù) / 總分片數(shù)。這種計算方式不受單片傳輸速度波動影響用戶看到的進度條是穩(wěn)定向前的。有兩點要特別提示前端開發(fā)注意一是進度到達100%不代表上傳完成后端還要合并需要把狀態(tài)切成服務(wù)器合并中二是進度條卡在99%一定不要慌張那是因為合并階段沒有獨立的進度反饋等后端合并完成就好了。如果你想讓體驗更好可以在合并接口被調(diào)用后輪詢一個合并狀態(tài)接口展示真實的合并進度后面我會講到后端如何配合。4. 后端源碼實現(xiàn)分片接收、索引校驗與安全合并后端我用Node.js Express來寫因為這在一線環(huán)境里最容易快速部署和二次開發(fā)。如果你所在的企業(yè)后端是Java或.NET邏輯完全一致只需要把文件操作、接口返回換成對應(yīng)的方言即可。目錄結(jié)構(gòu)我先給出來upload-service/ ├── app.js ├── config.js ├── uploads/ │ ├── tmp/ # 分片臨時目錄 │ └── files/ # 合并后的正式文件 └── routes/ ├── init.js ├── chunk.js ├── query.js └── merge.js4.1 初始化接口拿到文件唯一憑證前端算完MD5后調(diào)用這個接口后端返回fileId這個ID貫穿整個上傳生命周期。// routes/init.js const crypto require(crypto); const fs require(fs); const path require(path); const { tmpDir } require(../config); router.post(/init, async (req, res) { const { fileName, fileSize, chunkCount, md5 } req.body; // 1. 秒傳檢查MD5已存在則直接返回已完成 const exists await findFileByMd5(md5); if (exists) { return res.json({ code: 0, data: { fileId: exists.fileId, uploaded: true, message: 文件已存在秒傳成功 } }); } // 2. 斷點續(xù)傳檢查如果有未完成的上傳記錄則復用 const existing await findUploadRecord(md5); if (existing) { return res.json({ code: 0, data: { fileId: existing.fileId, uploaded: false } }); } // 3. 新建上傳記錄 const fileId crypto.randomUUID().replace(/-/g, ); const task { fileId, fileName, fileSize, chunkCount, md5, status: uploading, uploadedChunks: [], createTime: Date.now() }; // 落庫同時創(chuàng)建臨時目錄 await saveUploadRecord(task); fs.mkdirSync(path.join(tmpDir, fileId), { recursive: true }); res.json({ code: 0, data: { fileId, uploaded: false } }); });秒傳這個分支一定要做在初始化階段而不是合并階段這樣能省掉整個上傳過程的帶寬和計算資源。4.2 分片寫入接口與完整性校驗分片接口接收的是multipart/form-data格式前端每次提交一片后端把這片追加寫入臨時目錄。這里我做兩個校驗分片序號必須落在合法范圍內(nèi)分片大小不能超過約定上限防止惡意請求寫壞磁盤。// routes/chunk.js const multer require(multer); const fs require(fs); const path require(path); router.post(/chunk, multer().single(chunk), async (req, res) { const { fileId, chunkIndex } req.body; const chunkIndexNum parseInt(chunkIndex, 10); const record await findUploadRecord(fileId); if (!record) { return res.status(404).json({ code: 404, message: 上傳記錄不存在 }); } if (chunkIndexNum 0 || chunkIndexNum record.chunkCount) { return res.status(400).json({ code: 400, message: 非法分片序號 }); } if (req.file.size 5 * 1024 * 1024 1024) { return res.status(400).json({ code: 400, message: 分片大小超限 }); } const chunkPath path.join(tmpDir, fileId, ${chunkIndex}.part); fs.writeFileSync(chunkPath, req.file.buffer); await markChunkUploaded(fileId, chunkIndexNum); res.json({ code: 0, message: 分片寫入成功 }); });分片文件名用純數(shù)字加.part后綴方便合并時排序。這里為了方便直接用了writeFileSync因為單個分片只有5MB內(nèi)存壓力不大。如果你把分片調(diào)到20MB以上建議改成流式寫入避免多并發(fā)時內(nèi)存暴漲。這里還涉及一個容易被忽略的點服務(wù)端必須記錄已上傳分片否則斷點續(xù)傳無從談起。我在markChunkUploaded里做的是更新數(shù)據(jù)庫記錄把分片序號追加到一個數(shù)組字段里。更穩(wěn)妥的方案是一個分片一條記錄用獨立的表存儲這樣查詢已上傳分片時可以直接用索引。4.3 合并接口流式合并而不是內(nèi)存拼接合并是整個后端最容易翻車的地方。新手最容易犯的錯誤是用Buffer.concat()把所有分片拼起來再寫文件幾個GB的文件直接內(nèi)存溢出。正確做法是用Node.js的createReadStream和createWriteStream流水線式合并每次只讀寫一小塊。// routes/merge.js const fs require(fs); const path require(path); const { Transform } require(stream); router.post(/merge, async (req, res) { const { fileId } req.body; const record await findUploadRecord(fileId); const uploadedCount record.uploadedChunks.length; if (uploadedCount ! record.chunkCount) { return res.status(400).json({ code: 400, message: 尚有分片未上傳還需${record.chunkCount - uploadedCount}片 }); } const destPath path.join(filesDir, record.fileName); const writeStream fs.createWriteStream(destPath); // 按分片序號排序 const sortedChunks Array.from({ length: record.chunkCount }, (_, i) i); async function appendChunk(index) { if (index sortedChunks.length) { writeStream.end(); return; } const chunkPath path.join(tmpDir, fileId, ${sortedChunks[index]}.part); const readStream fs.createReadStream(chunkPath); readStream.on(end, () appendChunk(index 1)); readStream.on(error, (err) { writeStream.destroy(); res.status(500).json({ code: 500, message: 合并失敗分片${index}讀取出錯 }); }); readStream.pipe(writeStream, { end: false }); } appendChunk(0); });合并這種寫法本質(zhì)上就是挨個把分片文件接起來像拼水管一樣。這里每個分片的讀取是流式的內(nèi)存占用始終只有幾百KB不會因為文件大而增長。合并完成之后還要做一次完整的校驗計算合并后文件的MD5與初始化時的MD5比對。一致才更新上傳狀態(tài)為完成。這一步不能省網(wǎng)絡(luò)傳輸環(huán)節(jié)雖然每個分片的TCP校驗都過了一遍但拼接順序、分片內(nèi)容丟失這類邏輯錯誤只有整體MD5才能抓出來。4.4 臨時分片的生命周期管理合并完成后臨時分片目錄要及時清理。我是用一個定時任務(wù)每小時掃描一次臨時目錄清理兩類文件合并完成后遺留的分片以及超過24小時沒有新分片的半截上傳記錄。這里有個業(yè)務(wù)考量保留24小時是為了給斷點續(xù)傳留余地用戶今天傳了一半下班了明天還能續(xù)傳。超過24小時基本可以判定是放棄上傳了僵尸分片會占據(jù)硬盤空間必須清掉。清理時還要同步清理數(shù)據(jù)庫里的上傳記錄避免記錄越積越多拖慢查詢。5. 讓3.5GB真正傳完的可靠性設(shè)計代碼能跑通是一回事真正讓幾個GB的文件在各種惡劣網(wǎng)絡(luò)環(huán)境下都能傳完是另一回事。我在這里把上線過程中驗證過的可靠性機制完整列出來。這些機制單獨看都是小改動合在一起才是3.5GB一次傳完的底氣。5.1 網(wǎng)絡(luò)層超時、重試與并發(fā)降級分片上傳最大的好處是單次請求變小了但小請求同樣會遇到超時和斷連。我的處理策略是三層兜底單分片請求超時120秒超時就中斷中斷后的分片自動重試最多3次每次間隔指數(shù)退避2秒、4秒、8秒連續(xù)3次失敗后并發(fā)數(shù)從3降為1用單線程繼續(xù)傳這樣能避免在網(wǎng)絡(luò)質(zhì)量極差時多個并發(fā)請求互相爭搶帶寬反而一個都傳不完。這層邏輯寫在前端并發(fā)池的worker里后端不需要感知。后端要做的反而是把超時時間設(shè)得盡量寬松一些避免因為網(wǎng)關(guān)代理的默認超時把慢速請求提前掐斷。如果你們Nginx配了proxy_read_timeout建議調(diào)到180秒以上。5.2 服務(wù)端崩潰后如何續(xù)傳服務(wù)端重啟、磁盤滿、進程被殺這些故障都會中斷上傳過程。但只要分片已經(jīng)落盤、上傳記錄寫進了數(shù)據(jù)庫前端感知到連接斷開后重新走一遍初始化流程后端發(fā)現(xiàn)同名MD5的上傳記錄還在返回同一個fileId前端再查詢已上傳分片就能精準定位到中斷位置。這套機制的關(guān)鍵在于每個分片寫入必須是原子操作。也就是要么完全寫成功要么完全不寫。writeFileSync天然具備這個特性只要不出現(xiàn)寫一半進程被殺的情況。為了更穩(wěn)我建議分片文件名里包含分片序號寫入時先寫臨時名再rename成正式名rename是原子操作更安全。5.3 頁面層關(guān)閉標簽頁后的恢復方案用戶傳了一半關(guān)了標簽頁再回來發(fā)現(xiàn)進度條歸零會非常崩潰。前端要做的是把上傳狀態(tài)持久化到localStorage包含fileId、文件名、文件大小、MD5、總分片數(shù)。用戶重新選擇同一個文件時先查localStorage發(fā)現(xiàn)相同大小的文件且MD5一致直接調(diào)用后端查詢接口恢復進度條。function saveUploadTask(file, fileId, md5) { localStorage.setItem(uploadTask, JSON.stringify({ fileName: file.name, fileSize: file.size, fileId, md5, uploadTime: Date.now() })); } async function resumeUploadIfNeeded(file) { const saved localStorage.getItem(uploadTask); if (!saved) return null; const task JSON.parse(saved); if (task.fileName ! file.name || task.fileSize ! file.size) return null; const { data } await axios.post(/api/upload/query, { fileId: task.fileId }); // data.uploadedChunks: 已上傳分片序號數(shù)組 return { task, uploadedChunks: data.uploadedChunks }; }注意localStorage有5MB大小限制這里只保存描述信息不保存文件本身不會越界。5.4 磁盤與存儲合并前的最后一公里后端存儲是整個鏈路里最容易靜默崩潰的一環(huán)。分片寫入階段臨時目錄可能迅速膨脹幾個大文件同時在傳時磁盤占用是幾倍于最終文件大小的。我遇到過生產(chǎn)環(huán)境磁盤滿導致分片寫不進去前端一直報網(wǎng)絡(luò)錯誤排查半天才發(fā)現(xiàn)是磁盤問題。建議從第一天起就加三樣東西磁盤剩余空間監(jiān)控低于10%告警、臨時目錄的獨立掛載盤與系統(tǒng)盤分離避免寫滿系統(tǒng)盤、以及合并完成后的文件歸檔策略正式文件立即轉(zhuǎn)存到獨立存儲或?qū)ο蟠鎯?yīng)用服務(wù)器只保留最近幾天的文件。6. 上線后踩過的坑從413到文件損壞的完整排查鏈路方案上線兩周問題一個接一個冒出來。很多坑在開發(fā)環(huán)境根本測不出來只有真正跑到供應(yīng)商的真實網(wǎng)絡(luò)和生產(chǎn)環(huán)境里才暴露。我把這幾個坑按排查鏈路寫出來你照著這個順序排查能省大量時間。6.1 第一個坑Nginx默認限制導致的413上線當天就有供應(yīng)商反饋小文件能傳大文件一點上傳就報413 Request Entity Too Large。我第一時間想到的不是應(yīng)用代碼而是Nginx的client_max_body_size默認值是1MB。分片雖然是5MB但這個限制作用于整個請求體大小所以5MB的分片請求也會被Nginx擋下來。排查鏈路很簡單先看瀏覽器開發(fā)者工具里的網(wǎng)絡(luò)請求發(fā)現(xiàn)POST /api/upload/chunk返回413再確認請求體確實約5MB最后登錄服務(wù)器檢查Nginx配置。修復也直接server { client_max_body_size 10m; client_body_buffer_size 128k; proxy_request_buffering off; }為什么加proxy_request_buffering off因為默認開啟時Nginx會把完整請求體緩沖到磁盤再轉(zhuǎn)發(fā)給后端分片這種流式提交場景等緩沖完再轉(zhuǎn)發(fā)會帶來無謂的延遲和磁盤IO。關(guān)閉后直接流式轉(zhuǎn)發(fā)給Node進程。注意這里10m上限要大于分片大小的實際值留出multipart格式的額外開銷余量。6.2 第二個坑負載均衡把分片拆到了兩臺機器這個是排查時間最長的坑。供應(yīng)商反饋文件傳到一半報錯查看后端日志發(fā)現(xiàn)有的分片寫入成功有的直接404。仔細檢查后發(fā)現(xiàn)問題出在部署架構(gòu)上服務(wù)跑在負載均衡后面的兩臺機器上同一個上傳任務(wù)的分片A請求被負載均衡轉(zhuǎn)發(fā)到節(jié)點1分片B請求被轉(zhuǎn)發(fā)到節(jié)點2兩臺機器各自的磁盤上只有一半分片合并接口在所有節(jié)點上都找不到完整數(shù)據(jù)。解決方案有兩種我選了比較簡單的那種做應(yīng)用層會話保持。在負載均衡配置里按fileId做哈希路由保證同一個fileId的所有分片請求都落到同一個節(jié)點。更徹底的方案是把臨時目錄掛到共享存儲上但那個改動太大不是緊急情況不值得動。如果你用的是阿里云SLB或Nginx upstream有個更穩(wěn)妥的處理方式分片接口不依賴會話保持而是把分片數(shù)據(jù)直接寫到共享的存儲層比如NFS或?qū)ο蟠鎯Ω鞴?jié)點讀取同一份數(shù)據(jù)。這屬于一次性投入以后擴容也方便。6.3 第三個坑分片排序的字典序陷阱這個坑特別隱蔽而且只在文件超過100片時出現(xiàn)。某供應(yīng)商傳一個600MB的壓縮包合并后文件損壞解壓報錯。我一開始以為是分片丟失數(shù)了一遍數(shù)量是齊的又懷疑是某個分片內(nèi)容損壞但MD5對不上。最后把合并后的文件按順序?qū)Ρ仍嘉募l(fā)現(xiàn)有些數(shù)據(jù)塊順序反了。原因就是我在前端只用了String(i)做序號沒補零后端合并時用字符串排序10排到了2前面。雖然前端createChunks里已經(jīng)修正了這個問題但當時后端合并邏輯里自己也重新組裝了一次分片列表用的還是普通數(shù)組順序沒按補零后的字符串排。教訓有兩條一是前端序號的padStart(6,0)必須做二是后端在合并前要把分片序號轉(zhuǎn)成數(shù)字再排序不要用字符串。兩邊都按數(shù)字排序這個坑就徹底解決了。6.4 第四個坑合并進度為零的假卡死進度條走到100%接口遲遲不返回用戶端看到的是上傳完成但處理中一直轉(zhuǎn)圈。排查后發(fā)現(xiàn)是合并時沒有給前端進度反饋大文件合并要幾十秒用戶沒有任何提示體驗上就是卡死了。我的解決辦法是把合并改成長輪詢后端合并時把進度寫進Redis前端啟動合并后每2秒拉一次合并狀態(tài)接口展示單獨的合并進度條。合并完成后前端彈出結(jié)果提示同時把localStorage里的上傳任務(wù)清掉。順帶還發(fā)現(xiàn)一個細節(jié)合并狀態(tài)接口要設(shè)置合理的緩存頭否則前端每次拉取都會走完整HTTP鏈路浪費資源。我用的是Cache-Control: no-store因為狀態(tài)是實時變化的絕不能緩存。最后一點個人體會整套方案從設(shè)計到上線用了一個多月跑通核心流程只用了一周剩余時間幾乎都花在踩坑和加固上。如果讓我給正準備做大附件上傳的人一個建議那就是不要沉迷于一次性把代碼寫完美先把主流程跑通然后把網(wǎng)絡(luò)故障當成必然事件來設(shè)計。大附件上傳的本質(zhì)不是上傳而是對抗不確定性——網(wǎng)絡(luò)會斷、服務(wù)器會重啟、用戶會中途關(guān)瀏覽器、磁盤會滿、代理會超時。把這些場景先想清楚代碼怎么寫都對。另外有一件小事值得提汽車行業(yè)對文件的合規(guī)要求比一般行業(yè)嚴涉及供應(yīng)商提交的文件我們后來給每個分片加了上傳人的身份信息記錄合并完成后生成完整的審計日志。雖然這跟分片上傳本身關(guān)系不大但如果你做的系統(tǒng)要過體系審核最好提前把這條鏈路設(shè)計進去別等審核組來查的時候再補那時候數(shù)據(jù)早就不全了。這套方案的源碼我手上還留著完整版包括前端組件化封裝、后端分片清理腳本的定時任務(wù)實現(xiàn)以及合并進度的輪詢邏輯。篇幅原因沒法全部貼出來如果你在實際落地時遇到具體問題歡迎在評論區(qū)帶上你的報錯信息和技術(shù)棧我可以針對性地給出解釋。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
一个国产在线综合网站| 97人人爱人人做人人乐| 国产强奸无码乱伦| 精品国产国产AV| 丁香五月综合| 色色网91| 翔田千里A片一区二区| 国产25页| 欧中日成人免费影视| 女人喷水视频在线观看| 强奸a片网| 国产无马在线| 久久无码精品| 国产精品久久久久久久免牛肉蒲团 | 精品视频97| 久热婷婷| 亚洲美乱| 综合色播| 国产亚洲精品玖玖玖在线观看| 乱欲视频| 啪啪AV导航| 丰满人妻-区二区三区| 欧洲与亚洲欧美精品中文字幕| 91N欧美| 日本日皮视频逼| 亚洲A曰本VA欧美VA视频| 欧美色图电影| 欧美精品一二三| 啊啊啊不要嗯嗯在线观看| 操B久久| 欧美极品女人的天堂| 中文久久爆乳| 在线不卡视频| 九九RE视频在线精品| 在线人人人人人人精品超| 亚洲熟女乱色一区二区三区 | 天堂中文日本在线观看| 强奸乱伦AV网站| 操屄日韩| 簧片免费看视频| 999国产精品999| 中国一区二区亚洲人妻| 国产亚洲精品美女久久久m| 操日韩第| 六月婷婷色综合| 日本女人操逼| 99色在线| 蜜奶av| 夜夜高潮夜夜爽| 亚洲丝袜色图| 亚洲精品美女操逼| 校园春色综合香蕉| 亚洲国产精品久久久久婷婷老年| 综合熟妇一区二区三区| 亚洲风情在线观看| 免费av在线播放二区| 日韩 国产 欧美自拍| 天天视频网站黄| 91人精品妻入口| 亚洲欧洲日韩天堂av| 大香蕉免费3| 色天使亚洲综合在线观看| 亚洲综合另类小说色区亚洲成av人片在www | 青春草A| 97久久久精品| 啊啊啊草死我| 在线综合 亚洲 欧美中文字幕| 人人操我人人干| 日韩欧美成人午夜福利| 免费看一级a性色生活片久久无| 在线看片国产精品每日更新| 国产精选三级在线观看| av大香蕉| 色鬼在线综合| 欧美 日韩第一性色| 91老妇女| 热无码中文亚洲H一道本一区二区| 一区二区三区亚洲| 激情五月天丁香| 日本一区99| 97中文字幕一区| 中文字幕欧美日韩三级| 久久九九视频九九视频| 女同在线视频一区| 亚欧洲一区二区视频| 亚洲中文字幕一区二区| 天天色天天干天天爱| 秋霞曰韩R级| 亚洲综合春色| 中文字幕国产在线天堂| 婷婷久热| 91中文字幕在线观看| 国产精品美女视频诱惑| 亚洲欧美经典一区二区| 96久久久精品| 成人自拍三级在线观看| 丁香五月天啪啪| 欧美老妇女内射网址| 91痴汉| 日本孕妇一区二区视频操逼免费看| 九月丁香综合网| 厕所偷拍在线| 懂色Av| 婷婷五月天色色| 国产精品suv一区| 中文字幕在线免费观看 | 东京热毛片调教| 伊人久久在线视频观看| 免费看污网站| 欧美色图片| 色情五月综合婷婷| 人妻丝袜一区二区三区在线| 青青草天天亲夜夜操网| 色九久| 国产精品国产拍高清AV| 天天综合网合集91| 99热婷婷| 亚洲资源站| 日本中文字幕在线视频 | 人人摸人人添人人操| 禁止观看美女黄| 啊啊啊啊免费视频| 天天操综合网| 日韩一级欧美一级国产一级台湾 | 在线电影亚洲色图| 久久一区二区三区入口| 亚洲极品| 国产成人自拍视频在线| 久久久久久久久9| 亚洲中文字幕av| 欧美亚洲中文字幕| 久久人妻丝袜一区二区三| 99热欧美| 色播丁香| 2018天天日天天日| 素人无码中文字幕| av天堂手机版追回| 91老司机精品| 精品 码产区一区二-1080P高清在线www-B029AV| 亚洲91射| 亚洲 中文 女同| 成人久久久| 性色avv| 91无码西班牙视频在线| 欧美乱妇狂野欧美在线视频| 婷婷丁香五月天综合东京热| 国产自偷| 亚洲骚女一区二区三区| 亚洲另类小说卡通动漫| 青青久日| 毛片视频白嫩| 国产 丝袜 欧美中文 另类| 91视频女生| 日日干夜夜干| 黄色AAAAA欧美| 一本色道人妻久久| 91久久午夜无码鲁丝片久久人妻| 天天操人人操狠狠插| 国产人人干| 国产成人网址| 日本黄色大片一级视频免费麻豆| 久久人体一区二区| 内射日韩大臀美女| 亚洲最大网站av| 国产女人视频三四五区| 啊啊啊不要啊啊受不了了视频在线| 在线观看黄色电话| 99久久久久久久久| 97在线视频观看| 久久最新视频免费观看| 99操99| 搡老女人老91二区| 欧美 日韩 另类 亚洲| 欧美一级做a爰片免费视频| 另类图片天天影视| 老熟女综合网| 久久久久久久久久久久欧美日| 欧美顶级黄片AAAAA在线免费看| 青青在线视频免费| 99热8| 亚洲天堂电影精品一区| 伊人久操| 999精品国产高清一区二区| 在线小说视频一区| 97超碰热线| 九九热精品免费视频| 亚洲欧美中文一区二区三| 精品免费成人久久| 国产女人9999| 中文字幕一区二区三四五区日日骚| 亚 欧 美 综合| 亚洲成人久久一区二区| 桃花色综合影院| 葡萄牙性视频一二区| 91天射| 九九九久千久久激情蜜桃在线看 | 中文字幕成人理论在线| 色欲Av人妻精品一区二| 黄色免费一级在线毛片| 成人五月天丁香激情综合| 加勒比无码毛片| ...日韩成人一区二区三区字幕| 2011国产精品| 男人天堂2019亚洲| 玖玖视频在线资源一区二区三区| 人、人、摸,人、人、草| 国产91av在线播放| 永久电影三级在线观看| 91综合色| 国产又黄又粗的视频| 操碰97| 国产精品视屏| 国产91福利小视频在线观看| 中文字幕一区二区三区字幕| 台湾成人无码AV| 亚洲欧洲无码bt精品合集| 玖玖爱在线视频免费观看| 亚洲熟女综合网| 91制服丝袜| 91精品人妻一品二品三品| 亚欧操逼片在线观看 | 国内操逼视频二区| 日韩精品99久久久久久中文字幕 | 亚洲欧美91√| 九九九999久久久网站| 天天综合网~91| 超碰色美女| 操死我了嗯嗯嗯| 97在线青| 人妻第一页| 校园春色 欧美| 天堂69亚洲精品中文字| 成人七区| 992这里有精品| 欧美一二三区四五区| 九X超碰| 九九九九一级| 日韩少妇无码| 加勒比在线观看一区二区| 久久九精品| 国产亚洲中文不卡二区| 亚洲欧美97√| 亚洲综合九九| 视频国产欧美在线播放| 日韩免费看在线黄色片| 免费观看有码高清视频| 青青草玖玖爱| 久草精品在线| 久久精品 六十路 熟女 欧美| 免费精品无码一级毛片牛牛影视| 日韩中文字幕视频| 欧美在线播放aaaa| 欧美日韩情色一区二区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 青青草五月份天| 日韩性色| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 国语av狠狠色丁香婷婷综合激情| 人人操人人操人人人操| 99这里有精品视频| 日本东京热大香蕉a片| 日日日色色色色色| 欧美成人免费在线观看| 神马午夜久久久| 久久久久96| 国产呦精品系列在线观看| 强奸乱伦大香蕉| 9+1视频网址| 大香蕉在线视频重口味毛片在线| 国产一区在线播放| 亚洲色图欧美视频| 精品中文日韩字幕视频| www.人人摸在线视频| 日韩操p| 天堂种子在线www网资源| 无码99| 玖玖超碰熟| yaouchengrenav| 午夜福利视频在线一区| 日日黄色三级网站| a片自拍直播视频| 亚洲欧美经典一区二区| 极品AV网站在线观看| 1769成人国产精品视频| 五月天综合在线| 久操在97| 日韩在线欧美精品一区二区| 天天综合网国产| 欧美日韩小说| 欧美日韩岛国大片在线观看| 欧美青青视频| 2019久久久久久久久福利| 国语人妻精彩刺激| 啊啊啊好大好深| av天堂手机版追回| 伊人网一本| 男人的天堂午夜av| 亚洲天堂人人妻| 1024亚洲中文字幕久在线看片你懂的| 少妇色欲综合网2| 欧美日韩国产高清在线一二三区 | 欧美一级二级三级| 久久发布国产伦子伦精品| 欧美中日韩XXXX| 激情久久久| 中日韩久久久免费看| 亚洲成人美女无吗| 蜜乳av一区二区三区| 欧美另类综合久久| 99热国产精品| 亚洲人人操| 日韩99999| 九九成人视频| 草草草视频在线免费看| 欧美亚洲20p| 日韩熟女无码| 91伊人久久在线| 夜间福利片1000无码| 国产免费一区| 99碰碰| 国产久久天堂资源| 中文字幕乱碼在线| a级理论午夜日本| 欧美亚洲特P| 久久久久久久一级黄色打同平台| 热思思免费视频| 18岁禁 茉莉成人久久| 精品国产一区二区三区在线播出| 国产久久日| 久久久免费一级黄片| 精品少妇一区二区三区| 操九九九九九九| 日本成人免费一区二区三区| 欧色性第一页| 九九久久九九久久| 成人a大片在线观看| 强乱老妇中文字幕| 99re69| 天天日B夜夜干B时时操B| 91性高潮久久久久久久久| 熟妇视频一区二区三区在线| 大香蕉综合在线| 成人丁香五月| 艹精品| 啊v在线观看视频| 欧美精品丝袜久久久中文字幕| 91c色| 欧美激情在线观看视频| 欧美色日本| 自偷自拍的亚洲视频| www.av家庭乱伦| 久久视频,这里只有精品| 97舔舔| 无码乱人伦中文视频| 久久久久99999| 性爱AV天堂| 花野真衣| 玖玖色综合| 超碰无码加勒比| 精品少妇99| 欧美亚州色的图| 日韩素人无码一区二区三区三州| 日韩一区二区三区四区五区| 家庭乱伦性爱av| 明星性猛交ⅹxxx乱大交| 一本大道久| 日日A∨| 少妇国产不卡| 又大又白奶子| 五月丁香| www久久99| 国人欧美精品一区二区| 免费自拍三级综合| 99视频这有这里有精品| 97无码视频在线播放| 97 国产精品| 久久人爽| 国产精品在线网站| 欧美国产有色电影| 粉嫩AV一区夜夜嗨| a人欧美综合天堂麻豆| 玖玖97综合| 少妇二级| 国产精品一区二区三区在线密挑| 一本道综合色图| 日韩一级片在线看| 欧美日韩性爱操大逼| 97人妻免费中文字幕| 爱妃国产亚洲视频中文字幕| 人人操 欧美| 一起草三级AV电影在线观看| 国产又黄又爽| 超碰日韩人妻| 神马久久久久久伦理片| 综合在线导航一区| 牛牛aV| 国模吧 一区二区三区| 亚洲色图欧美视频| 9999免费精彩视频| 久热99| 激情文学网伊人| 日本人体九九九九九九| 欧洲中文字幕| 绑缚麻绳人妻寝取完整版| 青青青青草av在线观看| 四虎在线免费视频| 超碰社区97| 青娱乐91| 国产三级资源在线观看| 国产日韩欧美操逼视频| 欧美黄片欧美黄片xxx| 婷婷丁香五月天综合东京热| 97啪啪| 天天日B狠狠操| 久久久久久久久久久久久久久久9| 二级久久网| 欧美第一页| 天天操福利视频综合网站| 丝袜AV一区二区三区| 日韩欧美日韩| 老熟妇一区二区三区…| 色婷亚洲五月在线观看| 性色高清在线| 蜜桃臀久久| 久久超碰com| 欧美高清无码免费视频高清版| av在线观看不卡网站| 亚洲最新a在线观看| 久久思思热| 久草毛片电影怡| 久9综合在线| 日本性感人妻91| 欧美丝袜制服久久| 狼人综合婷婷激情四射 | 国产成人亚洲精品自产在线| 中文字幕神马久久| 東南亚性呦成人伦理资源在线视频| 在线a亚洲视频播放在线| 女同女同恋久久级三级| 精品一区二区三区蜜桃臀赵总| 日本一区二区三区精品| 超碰社区97| 亚洲一区操| 九九色婷婷| 麻豆性爱视频在线播放| 97网色| 国内毛片国产专区二| 黑丝少妇麻豆| 亚洲男人天堂2017| 欧美黄色片AAAAA| 久久久久久久久久久久黄色| 探花精品 一区二区| 人看人人摸人人操| 亚洲色图综合网| 国产精品福利资源在线尤物| 啪啪综合网| 欧美亚州色的图| 天天看精品动漫视频一区| 狠狠干狠狠干| 精品熟妇视频一区二区| 久久肏大逼| 日韩无码AB| 日韩激情电影中文字幕| 人人喜人人妻| 日韩三级伊人| 人妻天天夜夜爽一区二区| 天天碰久久入| 日韩一级免费性爱| 亚洲猛交| 男人天堂一区二区| 99re这里只有精品2| 亚洲制服欧美另类内射| 青青草在线视频美女| 久久av成人无码免费| 97超碰亚洲| 国产精品麻豆免费视频| 99抽插| Sekablack无码一区| 天操天操夜操夜月操月年年操| 大奶的诱惑| 亚洲 综合 欧美| 加勒比99999| 天天日天天爽| 热热色91| 午夜呻吟欧美| 欧美一区二区福利在线| 97在线观看免费视频l| 操逼www.| 亚州欧美另类| 亚州少妇| 国产中文字幕在线点播| 操老熟女AV| 亚洲一区中文字幕一区| 欧美东京热青青草| 99精品丰满人妻无| 久久黄色视频一区二区三区| 内射黑丝袜| 超碰AV在线| 屁股久久久久久| 射丝袜高跟鞋99| 成人av在线播放| 99日免费视频中文字幕| 国产又色又爽又舒服的三级视频| 亚洲97在线| 精品人妻夜夜草| 免费精品人妻一区二区三| 中文字幕精品亚洲熟女| 六月天婷婷| 久久久久久亚洲Av无码| 国产精品大屁股999| 婷婷五月天基地| 国产精品久久久久无码Av网曝门| 国产精品久久久九九九| 国产成人网| 天天做天天爱夜夜爽毛片试看| 天堂射| 亚洲人妻一区二区三区| 国产对白刺激视频| 亚洲一区二区三区婷婷| 男人把坤坤插入女人的下体| 防屏蔽在线视频| 狠狠操官网| 91国产丝袜白虎| 欧美 传媒 麻豆 日韩 偷拍| 91麻豆va国产精品| AV一区观看| 熟女少妇视频| 亚洲性猛| 特级大荫道BBwBBwBBW| 日本熟妇人妻中出视频| 久久久久久久强迫| 色97欧美| 欧洲亚洲天堂精品| 国产熟女一区二区丰满| 五月天婷婷成人网| 热99这里只有精品| 91成人高清在线观看| 亚洲丝袜少妇在线| 蜜桃臀久久| 久日91在线| 偷窥自拍亚洲色图| AA丁香综合激情| 亚洲AV无码黄色强奸| 亚欧无码线免费观看视频| 欧美另类丝袜熟女| 麻豆天美AV传媒第一页| 国产精品熟妇一区二区三| 超碰超碰欧美| 91 在线亚洲| 91碰碰| 人妻99p| 日本三级网页| 亚洲第一精品在线视频| 色色网91| 国产亚洲精品无码三区| 欧美人人曰人人操人人射射 | 亚洲av无码成人精品国产| 手机在线视频国内精品| 亚洲欧美在线观看免费| 乱伦Av网| 午夜精品探花| 亚洲欧美经典一区二区| 婷婷五月成人| 天美传媒av 在线| 色狠狠综合| 欧美性爱另类综合| 午夜男女爽爽爽在线视频| 国产亚洲精品玖玖玖在线观看| 天天色,天天干,天天干| 99在线无码精品秘 入口黑人| 欧美一级黄片视频在线| 男人a天堂手机在线版| 亚洲精品第一| 日韩成人大片在线观看| 一区二区娱乐网站| 丁香五月天堂网| 九九在线视频| 五月天综合网| 欧美在线色| 久久亚洲日韩国产欧| 综合色久欲| 久久久啊啊啊| 啊啊啊啊啊啊在线观看| 国产精品分类在线观看| 污污汅18禁网站在线永久免费观看 | 狠狠爱大香蕉| 亚洲精品成人动漫在线| 久久毛卡| 天天爱天天韩国日本牛牛牛牛| 男人的天堂不卡一区二区| oumeisetu综合| 久久有码| 欧日韩一二三f区| 白丝AV| 无码最新| 久久免费精彩视频| 国产欧美日韩臀| 大干人妻| 欧美一级在线观看成人| 岛国网址国产| www.婷婷| 97精品综合久久网| 日夜精品| 韩国一级AAA| 久久怡红院| 亚洲自拍一区夜夜操| 精品人妻一区二区三区蜜桃视频| 婷婷婷婷婷婷久久久久| 国产视频不卡在线观看| 亚洲色图欧美色图制服丝袜| 欧美色吧综合| 中文字幕日韩电影人妻| 丁香六月婷| 日韩少妇在线视频| 青娱乐休闲视频在线观看| 无码乱人伦中文视频| 天天操女人| 好湿好紧视频| 亚洲精品无码成人久久久99| 神马久久久久眼| 老鸭窝成人| 午夜乱轮操逼视频免费看| 99婷婷| 中文一区二区| 日韩黄色av中文字幕| 日韩精品 资源| 超碰综合97在线| 中文字幕,人妻,日韩| 艹我哪美一区无码| 青青久草| 精品国产精品一区二区| 成人黄页| 熟女五十路一区二区三| 熟女一区二区| 丁香色狠狠色综合久久小说| 在线 制服丝袜中出 人妻| 天天操天天看| 亚洲第一狼人丝袜美女另类| 嗯嗯啊啊好疼| 日韩熟女乱伦中出| 久久超碰97中文字幕| 免费试看60秒| 丰满人妻一区二区三区四| 久久久不卡| 夜夜操狠狠操| 俞拍久久国应视频| 亚洲精品视频二区| 少妇熟女一区二区三区| 丁香六月婷婷| 中文字幕一区二区三区50路| 五月婷婷影院| 999999精品| 97亚洲一区| 免费操逼91| 精品久久久久黄少妇| 日韩特级毛片免费观看全集| 日韩97视频!在线| 日本影视久久免费| 国产黄色动态精品| 无码区蜜乳| 亚洲美女 晚间男人天堂 | 亚洲成人一二三区| 亚洲一区二区在线观看91| 久久熟女人| 欧美资源| 中 文字幕一区二区三四 五 区日 日 骚 | 日韩精品人妻系列无码天堂| 亚洲精品久久久久毛片A片拉屎| 欧美久久草熟女| 亚洲无 码A片在线观看麻豆| 青青草十区九区爱夜| 91啦人妻| 97网址97| 91|九色|国产熟女| 中文字幕在线观| 神马久久久久眼| 欧美国产欧美在线观看| 大香蕉琪琪日本女优不卡| AV不卡在线| 国产精品久久久久9999小说| 无码99| 翔田千里无码一区| 嗯嗯啊啊视频一区二区三区| 天天干天天操天天干天天操| 色噜噜人妻av中文字幕| 神马精品视频| 九九热久久99精品re| 欧美爱国产综合、| 9久超碰| 国产美女裸体秘 永久无遮挡| 色网在线| 六九九九| 久久性爱精品一区| 成人性交午夜免费片| 91人妻视频在线| 欧美性色网| 区二区亚洲婷| 国产成人精品日本视频| 囯产精品久久久久久久久久梁医生| 老熟女熟妇| 日本一级性爱| 国产成人亚洲精品无| 91男同| 麻豆天美国美国产| 日本在线一二| 无码WWW免费视频网站| 黄片视频,下载| 国产乱码久久久| 天天舔九色婷婷| 五月天色综合| 日日插夜夜| 亚洲欧美色图| 老司机福利社视频在线观看| 久久熟妇五十路一区| 天天日夜夜爽| 欧美人妻一区| 91视频精品| 丝袜AV一区二区三区| 在线一区| 日韩啪啪啪视频| 丁香五月激情综合| 97超碰磁| 亚洲第一页色网| 神马福利久草| 激情五月激情综合网| 国产精品女生av| 国产高清午夜成人在线观看| 日日AAvv| 亚洲精品久久一区二区三区蜜桃臀| 国产视频三区四区| 人妻天堂综合网| www.人人cao| 强奸乱伦大香蕉| 欧美一级黄色免费专区| 屁股久久久久久| 婷婷性网| 欧美综合天堂| 欧美高清在线| 免费国产| 亚洲男人的天堂网| 91五月天| 99亚洲人人| 青青草五月天| 一区二区三区日韩欧美| AV一二区| 冬京热男人的天堂| 91在线限制级| 精品人妻二区三区| 亚洲影院小综合| 婷婷色综合| 久久久爆乳翘臀一线天伦理视频| 午夜福利无毒不卡| 国产日产精品久久快鸭的功能介绍| 男人天堂2017| 亚洲有码 视频一区| 久久九九综合| 1956日韩精品| 激情看片网站| 深夜操逼网| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 久污| 玖玖爱综合网| 色哟哟AV| 91欧美经典| 国产精品乱码久久久久| 超碰在线欧美性爱激情| 亚洲97成人在线观看| 岛国视频一二三区| 99在线无码精品秘 入口黑人| 成人午夜小视频手机在线看| www黄片免费看com| 99热免费| 国产亚洲色婷婷久久99精品91| 免费观看啪视频| 91精品久久久久久综合五月天| 日韩有码免费视频| 日本天堂网| 男女激情中文字幕| 大肉棒导航| 久久久久久久久国产| 中文久久96| 久9爱经典视频| 亚洲三级。日韩三级| 久久久精品中文字幕爱豆| 亚洲精品乱码线路中文字幕| 小情侣高清国产在线视频| 色婷婷综合网| 天堂在线一区二区| 久久久久久免费电影| 人妻一区二区三区四区视频| 日本性爱欧美性爱| 国产伦精品一区二区三区在线观| 91亚洲黑人| 中文字幕女同在线| 欧美亚洲系列| 九九久久一区二区伦理| 天天干,夜夜爽| 久草婷婷| 国产精品熟女一区二区三区| 国产午夜在线观看视频| www.99热| 国产久久一区二区| 美女诱惑一区| 天堂中文日本在线观看| 无码一区二区三区四区五区六区七区八区九区十区视频 | 天天综合网站| 97天天做| 干超碰碰熟女| 自拍偷拍 日韩无码| 久久久久久夜夜夜夜夜| 日本 情色 1区2区3区| 精品视频一区二区| 日韩欧美亚洲一区二区三区影院| 99999精品视频| 亚洲影视第一页| www.91人妻.com| 啊啊啊不要好疼视频| 九九久精品| 国产亚洲精品无码三区| 99久久com免费视频′| 亚洲色图欧美色图在线播放| 国产aⅴ无码片毛片一级网站| 精品-91人妻子系列| 人妻丝袜肏逼| 精品午夜福利国产一区二区在线观看| 久久一二三四五六七八九区区区| 欧美97免费| 丰满人妻无码一区二区三区| 夜夜狠狠躁日日躁色视频| 欧美色就是色| 91亚洲黑人| 啪啪啪男女亚洲中文字幕99| 果冻国产精品麻豆成人av| 动漫区日韩区欧美区| 久热精品在线国产| 神马久久久久眼| 欧美性暴力| 中文字幕在线高清男人的天堂| 美女诱惑在线一区| 免费日韩黄片| 美女97超碰| 岛国片在线视频网站| 人人操天天爽| 100啪啪视频大全| 超AV色女| 国产精品麻豆成人av| 曰韩中文人妻视频| 台欧久久精品视频| 伊人九九九| 一道本久久棕合爱| 日产欧美电影一区二区三区| 久久理论字幕视频| 欧美v日韩v亚洲v最新在线| 女同在线视频一区| 性色AV蜜色av色欲av| 色综合尤物| 夜夜爽夜夜摸夜夜操免费视频| 国产女人91精品嗷嗷嗷嗷| 91丝袜美腿片| av资源在线播放天堂| 国产91丝袜 在线播放| renqi久久久久久久久久久久| 蜜臀99精品国产高清在线观看| 欧美特大黄一级片片免费| 日韩无码人妻中字久久三区四区| 韩国一级婬片A片AAAAA| 91bbb| 久久一二区四| 国产v片在线免费观看| 国产传媒一区日韩| 家庭乱伦网站国产| 欧美综合色图片| 宅男91视频在线播放| 国产日韩精品suv| 亚洲国产青青| 激情五月综合网| 大香蕉欧美| 国产久久久久影院老熟女| 日韩av在线播放不卡| 囯产精品久久久久久久久久二区三区| 天天干天天日天天射黄色| 亚洲蜜乳av| 日韩黄色小说| 日韩AV电影网站| 免费精品人妻一区二区三| 99蜜月精品久久| 欧美少妇大量自拍视频在线观看| 一级人妻性爱视频| 精品人妻久久久久一区二区三区| 淫淫总合网| 国产女人和拘做爰视频| 色97干| 国产福利夜| 久久伊人大香蕉| 精品蜜乳AV免费观看| 密臀成人视频久久久| 91在线页| 国产精品久久久久久久黄无码| 9久精品| 天天影视网色欲色香| 美国美女AV在线| 日韩精品人妻一| 亚洲欧美日韩偷拍色图| 懂色影视久久| 快点操死我| 熟女乱伦二区| 久9re热视频这里只有精品| 麻豆一区二区三区在线看| 成人老鸭窝人人在线视频| 五月丁香大香蕉| 国产一级不卡在线观看| 九久9精品| 本道在线| 国产精品午夜成人福利| 狠狠综合| 秋霞网—男女啪啪亚洲免费体验区| 超碰九7免费| 久久精品人妻一区二区三区| 中文久久一区| 97久精品| 337p大胆噜噜噜噜噜91Av| 视频在线观看免费一区二区三区| a片 xxxx受爽视频| 一本大道久| 久久视频,这里只有精品| 国产传媒日本欧美专区| 91逼逼女人91| 亚洲情色五月天 | 明星性猛交ⅹxxx乱大交| 妇女乱色二区| 久热久一区二区三区| av资源在线观看少妇| 在线欧美69V免费观看视频| 翔田千里A片一区二区| 床戏久久久av一区二区麻豆| 偷拍综合亚洲| 亚洲伊人久久精品影院| 国产精品网站免费| 欧洲亚洲人妻无码中字久久三区四区| 2020中文字幕| 一区二区日韩欧美久久| 日本大片日本一区二区免费高清| 免费精品福利在线观看| 日本123区操B视频| 欧美一级久久久久久久大片动画| 亚洲欧洲无码bt精品合集| 内射夫妻三片| 黄色无码高清黄色无码网站| 狠狠久久手机视频精品| 99热这里都是精品| 综合色好色| 张柏芝国产一区在线观看| 久久久精品网| 青娱乐休闲视频在线观看| 色约约一区=区三区| 久久精品久久久久久久| 人人操人人93| 91啦人妻| 精品人体无圣光凹凸| 亚洲精品性爱片| 五月婷网站| 强奸a片网| 色9999日韩国产| 人妻久久久久久久久久久久久久久| 久操九九九九| 高清不卡国产| 亚洲欧美一区二区不卡视频播放| 好好的日:com久久九九| 黑人粗大V S日韩女优视频| 蜜汁欧美| 在线啊啊啊| 色香欲综合| CCYY草草影院地址入口| 五十路六十路七十路熟婆| 91爆操视频| 精品区9| 日韩美女久久一区二区三区| 日本999精品| 躁躁日曰躁2020| 色九色久| 国产福利电影| 午夜男人av| 日韩AV片| 久久国语| 欧美激情在线观看视频| 免费国产电影一区二区| 免费的黄片有限公司| 亚洲av无码成人精品国产| 一二三区操逼国产91| 中文字幕高清精品一区| 久久艹逼视频| 欧美操逼视频二区| 日日嗷| 豆花视频操逼网址| 亚洲砖码砖专无区2023| 人人手机欧洲亚洲国产人妻| 久久国产999| 夜夜精品视频| 人人做人人妻人人夜视频| 熟妇视频一区二区三区在线观看| 亚洲宗合网| 欧美精品成人一区二区在线观看| 性色生活片久久毛片婬片免费放女人一级毛片 | 高清无码在线播放网站| 色婷婷六月| 麻豆久久视频在线地址| 五月天人妻综合| 欧美爱三级日韩久久| 国产成人精品日本亚洲语言| 色大师网站www永久网站视频| 亚洲无码日韩电影| 久久黄色视频一区二区三区| 射 色综合| 啊a一区在线| 国产区在线| 韩国三级理论在线| 欧洲中文字幕| 欧美人妻少妇| 久久草大香蕉| 老汉网| 伊人国产成人av网站| 色噜噜人妻丝袜a∨先锋影 | 中日韩熟女| 岛国小电影| 亚洲高清欧美总合| 亚洲成熟国产精品美女| 中美日韩毛片| 夫妻天天操岛国视频| 婷婷在线视频| 久久有码视频| blacked精品一区国产| 东北女人| 久久精品福利影院| 色香阁在线| 超碰欧美97| 精品超碰中文在线| 夜夜嗨一区二区三区三州加勒比| 亚洲啪啪视频一区二区| surenchaopeng| 亚洲无码com| 日韩一999精品| 97免费在线视频| 日本熟女中文| 亚洲天天自拍| 99色天堂| 欧美97网| 久久人妻视频网| 亚洲狠狠入| 女人双腿搬开让男人桶| 超碰 欧美| 日本熟女免费視颖| 人人搡人人肉久久精品| 精品人妻av在线播放| 午夜精品久久久久| 日韩av不卡在线看| 风月影院男女十八禁| 亚洲一级性爱视频免费看| 小骚逼被操的爽不爽| 人人妻人射| 国产偷人妻精品一区二区在线| 欧美视频一区二区在线| 欧美综色欧| 婷婷综合| 天天射天天操天天干天天吃2018| 国产性刺激| 美日韩男女操屄视频| 91性高| 亚洲欧美国产其他二区| 久久精品国产97欧美精品亚洲 | 欧美午夜精品久久久久久3D| 女人天堂av在线播放| 色播五月丁香| av亚欧| 少妇色综合| 麻豆国产96在线| 性欧美91| 99xav| 欧美一区二区亚洲天堂| 欧美春色| 99re9这里只有精品| 人人爱人人操人人性| 亚洲AV人人澡人人爱| 红杏大香蕉| 另类小说综合网| 欧美骚少妇| 天天添天天干电影| 亚洲成人无码影院| 亚洲成人AB| 久久久久久久久久久久久久久乱码| 国产精品一区午夜福利| 久草成人影片| 色女综合| 在线国产探花| 亚洲不卡三级手机播放| 蜜臀th| 超碰久久中文| 日本潮催一卡操| 久操| 91伊人大香蕉| 婷婷五月天激情网| 天天夜躁日日躁狠狠2002| 亚洲脚交| 亚洲情色图片区| 亚欧国产无码精品在线| 91人妻人人澡人人爽人人精品| 四虎影视永久在线观看精品免费网站 | 国产家庭乱伦性爱视频| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 国产亚洲一黄| 日本五十路熟女一区二区| 国产v亚洲v日韩v欧美v片另类| 97欧美色资源| 人妻夜夜爽天天爽麻豆三区网站| 92人人操人人| 天天日天天干天天操| 欧洲一区二区| 小骚逼被操的爽不爽| 国产精品91一样| 日韩性爱再线视频| 欧美国产精品| 欧美成人免费在线观看| 国产精品电| 天美欧美国产| 欧洲中文字幕| 丁香五月电影| 日韩中文字幕在线视频观看| 欧美日韩黄片精品在线| 国产视频97| 一级黄碟在线看| 久久欧洲| 有码人妻系列| 99色在线视频| 性色av婷婷久久一区二区点复制| 污污汅18禁网站在线永久免费观看| 亚洲人妻久久| 色香天天| www.男人的天堂| 国产欧美一区激情交| 先锋色眉乱伦资源| 丁香六月激情| 亚洲图片激情综合另类| 黄骗免费网站| 色婷婷国产精品一区在线观看| 人人妻人人爽一区二区三区| 女性喷水高潮在线观看| 国产日韩在线播放| 为用户提供免费看黄网址在线观看| 欧美狠狠干| 久草加勒比一区在线| 麻豆天美91| 久久免费9| 久久久9999| 91社区伊人| 亚洲色图91| 成年人黄色视频免费| 人人操人人干xxx| 国产a片操逼| 久久伊人亚洲AV无码网站| 搞中出久久| 秋霞影音一区二区三区 |