色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

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

分片上傳實戰(zhàn)指南:解決大文件傳輸難題,實現(xiàn)斷點續(xù)傳與秒傳 1. 整車廠大附件到底有多大被附件拖垮的供應商門戶去年我給一家汽車制造企業(yè)做供應商門戶的附件模塊改造真正觸發(fā)這次改造的是一通來自工藝部門的電話。對方語氣很急一個3.5GB的焊裝線改造仿真視頻傳到73%斷了重傳一次到50%又崩了瀏覽器直接白屏再點上傳按鈕毫無反應。這不是個例。整車廠和供應商之間每天流轉(zhuǎn)的文件體積早就超出普通網(wǎng)頁上傳能承受的范疇。我翻了后臺日志把過去一個月上傳失敗的文件做了個統(tǒng)計發(fā)現(xiàn)超過1GB的文件失敗率高達四成失敗原因幾乎都是網(wǎng)絡(luò)中斷、請求超時、瀏覽器內(nèi)存溢出這老三樣。最夸張的一條記錄里同一個2.8GB的檢測報告被供應商傳了11次才成功。1.1 一組真實的文件體量數(shù)據(jù)汽車制造場景里的大附件不是我們平時理解的幾百MB而是以GB為單位的龐然大物。我整理了一下那家企業(yè)在供應商門戶、研發(fā)協(xié)同平臺、質(zhì)量追溯系統(tǒng)里經(jīng)常出現(xiàn)的附件類型大概是這么個量級文件類型典型體量產(chǎn)生環(huán)節(jié)上傳方向CAD數(shù)模Catia/UG500MB - 3GB產(chǎn)品設(shè)計供應商 → 主機廠焊裝線仿真視頻1GB - 6GB工藝驗證供應商 → 主機廠路試車載視頻500MB - 8GB質(zhì)量測試測試部門內(nèi)部PPAP整套提交包200MB - 1.5GB生產(chǎn)件批準供應商 → 主機廠BOM清單與檢測報告50MB - 800MB采購與質(zhì)檢供應商 → 主機廠這些文件有很多共同特征周期緊當天必須交付網(wǎng)絡(luò)環(huán)境不可控供應商那邊可能是跨國專線也可能是普通寬帶文件本身是企業(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)、應用服務(wù)器任何一個環(huán)節(jié)的超時時間設(shè)置都會成為斷點。請求斷了就得從頭再來沒有任何挽回余地。汽車行業(yè)的供應商網(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)以及供應商和主機廠之間的網(wǎng)絡(luò)現(xiàn)實。下面我把這套邏輯拆開講清楚理解了再去看源碼自己改起來才不慌。2.1 分片上傳的整體流程一次完整的分片上傳包含七個階段前端讀取文件計算MD5指紋調(diào)用初始化接口把文件名、大小、總分片數(shù)、MD5交給后端拿到文件唯一ID后端拿到MD5后先查重如果庫里已有相同指紋的文件直接返回秒傳完成不走后續(xù)流程前端按固定大小切分文件生成分片序號前端把分片并發(fā)上傳每傳完一片后端落盤并記錄所有分片傳完后前端調(diào)用合并接口后端把臨時分片按順序拼成完整文件校驗合并后的文件MD5核對大小標記上傳完成。在這個流程里分片只是手段不是目的。真正要解決的是兩個問題單次請求體量可控以及失敗后最小成本重試。2.2 秒傳與斷點續(xù)傳MD5在這里的真正作用很多人以為MD5是用來校驗文件完整性的在分片上傳里它的首要作用是去重。供應商第二次提交同一個檢測報告前端算出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 進度的精確計算進度條不應該是某一片正在傳就顯示那一小段的百分比而是以已成功落盤的分片數(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邏輯完全一致只需要把文件操作、接口返回換成對應的方言即可。目錄結(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ū)ο蟠鎯梅?wù)器只保留最近幾天的文件。6. 上線后踩過的坑從413到文件損壞的完整排查鏈路方案上線兩周問題一個接一個冒出來。很多坑在開發(fā)環(huán)境根本測不出來只有真正跑到供應商的真實網(wǎng)絡(luò)和生產(chǎn)環(huán)境里才暴露。我把這幾個坑按排查鏈路寫出來你照著這個順序排查能省大量時間。6.1 第一個坑Nginx默認限制導致的413上線當天就有供應商反饋小文件能傳大文件一點上傳就報413 Request Entity Too Large。我第一時間想到的不是應用代碼而是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 第二個坑負載均衡把分片拆到了兩臺機器這個是排查時間最長的坑。供應商反饋文件傳到一半報錯查看后端日志發(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ù)。解決方案有兩種我選了比較簡單的那種做應用層會話保持。在負載均衡配置里按fileId做哈希路由保證同一個fileId的所有分片請求都落到同一個節(jié)點。更徹底的方案是把臨時目錄掛到共享存儲上但那個改動太大不是緊急情況不值得動。如果你用的是阿里云SLB或Nginx upstream有個更穩(wěn)妥的處理方式分片接口不依賴會話保持而是把分片數(shù)據(jù)直接寫到共享的存儲層比如NFS或?qū)ο蟠鎯Ω鞴?jié)點讀取同一份數(shù)據(jù)。這屬于一次性投入以后擴容也方便。6.3 第三個坑分片排序的字典序陷阱這個坑特別隱蔽而且只在文件超過100片時出現(xiàn)。某供應商傳一個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è)嚴涉及供應商提交的文件我們后來給每個分片加了上傳人的身份信息記錄合并完成后生成完整的審計日志。雖然這跟分片上傳本身關(guān)系不大但如果你做的系統(tǒng)要過體系審核最好提前把這條鏈路設(shè)計進去別等審核組來查的時候再補那時候數(shù)據(jù)早就不全了。這套方案的源碼我手上還留著完整版包括前端組件化封裝、后端分片清理腳本的定時任務(wù)實現(xiàn)以及合并進度的輪詢邏輯。篇幅原因沒法全部貼出來如果你在實際落地時遇到具體問題歡迎在評論區(qū)帶上你的報錯信息和技術(shù)棧我可以針對性地給出解釋。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97碰在线视频| 91在线观看,天天综合| 黄色一区三区| 91婷婷伊人狠人| 天天夜躁日日躁狠狠2002| 毛片中心9视频99| 国产美女在线精品免费看| 欧美性色综合网| 大香网站| 91性高朝久久久久久久久| 精品性爱久久视频| 国产精品小视频一区二区三区| 九九五月天| 中文字幕视频一区视频二区| 久久久久国产一区二| 熟女人妻一区二区三区| 97免费视频在线观看视频| 在线只有精品| 全免费a敌肛交毛片免费| 天天肏视频| 大香蕉欧美国产日韩高潮| www黄片免费看com| 亚洲综合中文字幕有码| 免费观看性欧美一级| 久久久久99精品成人片蜜臀| 91一区二区三区蜜桃| 六月丁操逼| 天天爽天天| 丰满人妻无码一区二区三区| 久久国产逼| av三级电影在线播放| 好色美女九七第一页| 午夜福利区| 91狠| 熟妇高潮一区二区免费视频| 久久久国产成人一区二区三区在线| 欧美色97| 私色综合网| 韩国午夜理伦三级好看| 九色 人妻 大香蕉| 国产 亚洲 丝袜 制服| 免费?级毛片无码?∨蜜芽试看| 欧美传媒| 热热色AV| 夜夜欧美| 亚洲无码超碰免费| 视频二区美腿制服人妻欧美| 亚洲日韩精品久久久久一区壹牛| 日本大香蕉综合网红本杳社区| 天天干天天日天天射黄色大片| 久久久久久久九九九九九九| 国产激情视频一区区三区| 99久久com免费视频′| 天天久久久久久| 尤物视频新赏网鲜网色诱网| AV男人天堂网| 亚洲无码com| 亚瑟国产精品久久无码| 婷婷五月天激情网| 少妇99成人麻豆| 淫骚熟女一区二区三区| 一区二区影视| 在线人人人人人人精品超| 91chinese在线| 国产精品午夜成人福利| 97免费在线观看| 大二网站亚洲| 男人亚洲91首页在线| 中文乱码99| 亚洲综合草草| 亚洲日本激情| 白嫩嫩一区| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 亚洲天堂欧美| 伊人五月天| 中文字幕在线播放2中文字幕在线观看2| 亚洲天堂另类美腿| 精品九九九九| 日产狠狠干| 曰本精品久久久| 久久久一区二区三区麻豆| www..com操老师| 国产精品白虎| CCYY草草影院地址入口| 爆乳免费黄网站| 熟女精品日韩一区二区三区| 欧美强奸乱能| 九九免费影片| 日韩AC| 999九九精品| 国产美女自拍AV| 人妻在线大香蕉| 88xx成人精品视频| 欧美日韩国产电影| 久久久久九九九九| 亚洲美女色图| 人妻AV在线| 亚洲黄色| 天天综合网~91入口| 综合久久97| 国产精品亚洲四五区在线观看| 成人日本视频人妻在线| 国产亚洲精品玖玖玖在线观看| 欧美日韩天堂| 97天堂| 丁香婷婷五月| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 国产不卡精品91| 一本色道久久综合精品婷婷| 欧美乱色| 一区二区视频在线播放| 久久九色| 少好三P| 欧美十八禁视频| 亚洲人妻久久久| 亚洲色吧网| 粉嫩粉嫩一区性色AV片| 男人的天堂三级| 中文字幕版| 自慰白浆在线观看| 99国产精品视频尤物| 亚洲亚洲亚洲天堂天堂| 制服中出中文人人精品| 影音先锋视频在线| 91日日| 久久99国产综合精品女同| 粉嫩AV一区夜夜嗨| 岛国1区2区3区在线观看| 操婢日韩| 欧美亚洲第1页| 人人插人人搞人人操| 国产在线播放成人免费| 人妻精品一区二区三区| 蜜桃臀久久| 国产乱人妻精品入口| 久久久九97| 国产精品自拍欧美在线| 高清国产成人无码| 日韩精品碰碰| 麻花传媒免费网站在线观看| 亚洲国产欧美一区二区潘金莲| 日韩一级二级三级在线不卡观看完整| 国产性感骚丝袜在线| 亚洲综合色婷婷| 欧美国产伊人久久久久| 91麻豆va国产精品| 91久久婷婷| 大香蕉综合| 日本一区二区三区四区免费观看| 欧美色另类| 亚洲一区二区 麻豆传媒| 天天综合香 ld视频| 色色综合网站| 99久久网站| 免费在线黄片视频| 久久亚洲欧美中文字幕国语| 中文三一区| 91四海无码日韩欧美| 青青五月天| 欧美劲爆第一页| 青青操青娱乐| 97超碰超碰| 2024黄色视频| 成人性爱视频在线看| 亚洲小说视频| 日韩中文字幕国产| 家庭乱伦网站国产| 人妻嗯啊啊在线播放| 啊啊啊啊啊在线观看网址 | 97在线免费看视频| 欧美成人免费在线观看| 91亚洲在线| 乱伦熟女专区| 狠狠综合网| 曰本精品久久久| 97免费视频在线观看| 热99这里只有精品| 男人的天堂2010| 欧美久久草熟女| 久艹伊人精品综合在线| 欧洲色综合| 手机午夜电影神马久久| 丁香六月啪啪| 操死我了嗯嗯嗯| 91高潮| 欧美性爱日韩性爱| 一区二区三区精品视频| 狠综合网| 日本性爱网址| 操日韩第| 成人97人人超碰人人| 午夜福利免费精品视频| 久久熟妇五十路一区| 丝袜加勒比| 无码人妻精品酒店| 一牛影视久久久一区二区三区| av东京热男人的天堂| 国产精品一二三区18| 国产一级不卡在线观看| 日韩无码专区| 欧美春色| 五月丁香社区婷婷日韩欧美精品影院 | 麻豆国产精品午夜视频| 亚州情色j区| 欧美在线啊啊| 97色伦欧美| 五月天久久人妻| 久久久久久网址| 久久久影院| 99色网| 97操97色| 国产精品久久久久久照片| 国产一区二区三区中文字幕| 校园春色五月天| 亚洲欧洲美腿丝袜| 一区二区三区视频国产免费| 蜜臀久久精品久久久久视频| 五月丁香久久| 色欲Av人妻精品一区二| 亚洲日韩XXX| 久色网| 干超碰碰熟女| 国产女主播视频在线观看| 爱av免费| 日韩性爱啪啪视频| 老色鬼成人精品视频下载大在线观看| 欧美中文字幕日韩在线| 久久中久文96| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 麻豆一区在线| 无码伊人久久大杳蕉中文无码| 性色高清..……| 9久综合网| 7777奇米影视久久| 99热在线播放| 五月天欧美色图| 男人的天堂亚洲| 美国一区二区三区视频| 色色色网站| 午夜传煤十二区精品| 欧美激情超碰777| 性做久久久久久免费观看软件| 午夜.DJ高清在线观看免费7| 夜夜天天噜狠狠爱2021| 狼狼色丁香久久婷婷综合五月| 69精品久久久久中文字幕| 丝袜狂射91| 欧美精品xxxwww| 天天干干天天干干| 97欧美久久久久久久| 免费精品福利在线观看| 91中文精品日韩欧美在线| 九九成人精品| 91操熟妇| 日本成人A片网站| 久操操AV电影| 98精品国产乱码久久久久久| 操高情无码| 少妇啪啪自拍| 91视频国品一二三区| 99www.bibizy香蕉资源国产一区二区三区高清 | 97久久精品亚洲| 韩国成人精品久久久免费看| 日本肉体xxxx裸交| 久热这里只有精品9| 久久久人体| 私人尤物在线精品不卡| AV丝袜少妇| 日韩性爱播放| 国产偷人伦激情在线观看| AV色女综合| 一区二区三区在线资源| 国产狂喷潮在线精品| 最新9久久久9免费视频| 黄页大片在线观看| 91狠狠综合久久| 操逼大黄片| 日日日日做夜夜夜夜做无码97| 中文字幕一区二区三区四区在线视频| 怡红院一区二区熟女人妻| 色九区| 中字幕人妻一区二区三区| 69AV女优男人的天堂| 中文字幕五月婷婷免费| 手机在线大香蕉| 91人人爽人人爽| 人妻中文字幕日韩电影| 久久精品欧美一区二区三区不卡| 999精品乱码| 超碰99在线| 狠狠色五月亚洲91| 欧美综合传媒| 91久久久视| 婷婷色综合| 国产色呦呦| 国产乱伦视频污| 狠狠2050在线观看| 色制服丝袜夫妻av一区| 内射中出日韩在线观看视频| 精品国产网站| 五月丁香| 99热只有| 极品丝袜无码| 91久久久久久| 夜夜夜久久| 欧美国产视频| 日韩99999| 青女偷拍网| 亚洲人成网站7777| 国产一区二区三区,在线观看观看| 91大胆欧美| 大香蕉在线视频15| 亚洲限制级| 亚洲影院小综合| caopeng97人妻| 欧美宗合网| 超碰69| 婷婷五月天色网| 国产97在线播放| 国产精品无码av在线| ji熟女.com| 91午夜无码| 久久精品三级影视| 亚洲天堂另类美腿| 操亚州| 男人天堂免费| 欧美18老人禁| 亚洲1区2区三区高清中文字幕| 日本不卡一区二区| 国产成人久久久精品免费AV| 激情专区综合| 精品.99999| 伊人玖玖网| 免费国产电影一区二区| 婷婷综合在线| 天天干天天中出av| 特色a在线上| 美女视频尤物网在线看| 国产精品老熟女一区二区| 亚洲丝袜天堂| av激情亚洲五月天| 97电影院超碰| 久久噜噜噜精品国产亚洲综合| 亚州欧美在线| AV网站高清无码在线观看| 艹少妇网站| 色婷网| 2000亚洲男人天堂| 久久综合国产精品国产| 亚洲欧洲综合| 老司机老司机午夜影院| 欧美亚性天堂| a亚洲欧美色欲| 免费的黄片有限公司| 嫩草影院在线观看精品| 日韩三级久久久| 97资源免费视频| 美女天天干| 色天堂在线观看| 青娱乐黄色录像| 操久久久久| 加勒比aⅴ| 国产肏逼网站| 囯产操逼片| 思思热久久成人| 熟女五十路一区二区三| 另类图片五月| 亚洲大色鬼| av影片在线观看不卡| 国产无码高清操逼视频| 色色色综合网| 91欧美性| 操一操摸一摸| 日韩一级片| 97在线青| 中文字幕成人| 97精品国产97久久久| 综合九九| 7777奇米影视久久| 4141514逼喷水三级片| 2020中文字幕在线| 韩国一级婬片A片无码天美| 91狠狠色丁香婷婷综合久久| 欧美一区二区在线资源| 亚洲综合首页| 色色色五月婷婷| 精品一区二区三区四区女| 一本久道久久综合狠狠爱一密臀精 | 日本天天干天天日一区| 精品国产三级av韩国在线| 九九碰九九爱97| 国产乱青青草久久| 欧美操逼视频二区| 夜夜操夜夜爽夜夜高潮| 色五月婷婷中文字幕| 18禁久极品美女久久哦哟呀!| 亚洲18禁| 在线可观看的黄色网址| 在线亚洲丝袜视频网站| 国产小炒后入式| 97超碰超碰| 欧美综合亚洲| 欧美日韩色| 色色色色综合网| 中文字幕第7页| 久久东京伊人一本到鬼色| 国产精品视频内谢女人| 97精| 色综合一区二区三区| 久久九九视频九九视频| 97色碰| 亚洲中字幕日本一区二区三区| 亚洲成人性| 韩国午夜理伦三级好看| 欧美三级免费伊人| 热热色国产一二区AV| 黄色av播放免不| 素人伊尹大香蕉免费下载视频| 日曰骚久久精品| 激情综合五月婷婷| 亚洲欧美日韩国产丝袜自拍中文| 色欲三区| 亚洲丝袜二区| 欧美日韩性爱电影在线| 肉丝网站91| 成·人免费午夜在线观看| 2020国产精品| 亚洲欧美首页| 啊啊啊啊啊操我视频| 亚洲精品久久久久毛片A片拉屎| 91丝袜美女| 人妻 中文 日韩| 亚洲蜜臀视频精品久久| 国产玖玖| 亚洲综合成人网| 91中文字幕在线观看| 日韩欧美视频青青| 国产成人 综合亚洲 天堂| 嗯嗯啊好大| 亚洲高清无码AAA久久久精品| 欧美综合狠| 日本中文字幕在线电影| 亚洲欧洲激情卡通另类文学四射小说网站| 很黄很污的免费网站| 欧 美 自 拍 偷 拍| 午夜AV污污污| 丝袜AV一二三区| 高清国产精品福利网站| 伊人在线大香蕉视频久久| 俺去也婷婷| 日韩无码一级黄色av片| 日韩欧美~中文字| 国产av高清版| 成年人三级黄色片视频| 国产sv美女内射| 在线综合 亚洲 欧美中文字幕| 2019久久久久久久久福利| 日韩中文字幕2020| 伊人天堂在线| 乱伦Av网| 日韩有码 一区二区三区| 超碰社区97| 99re在线观看| 青青青操| 亚洲高清无码免费观看视频| 久久精品久久九九精品| 国产成人亚洲精品无| 天天综合网亚洲综合网| 青青草中文-久久青草精品一区二区三 | AV99热18这里只有精品| 午夜天堂精品久久久久91| 欧美黄色大片在线观看 | 内射小黄片| 久久激情视频| av草草在线电影| 亚洲精品国产熟女久久久| 91九九九吃| 啪一啪免费视频| 国语国产操逼伊人AV网| 天天日天天干天天操| 超碰是碰在线观看| 久久一二三四五六七八九区区| 99热综合| 中国AV美女| 国产第二页| 图色综合网| 婷婷激情五月综合| 亚洲精品中文字幕一区在线视频| 97超碰美女| 国产夫妻性生活视频| 欧美久久婷婷| 九九热视频这里只有精品| www.夜夜| 99操逼| 国产一级黄色片在线观看| 国产狂喷潮在线精品| 午夜毛片亚洲精品片国产久久久| 欧美日韩亚洲少妇寂寞影院正在播放| 在线五区| 人妻熟女一区二区| 啊啊啊久久久视频| 97免费视频在线观看视频| 亚洲精品一二三四区| 久久9精品视频| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 999久久久免费精品国产牛牛| 啊啊啊啊网站| 超碰在线人妻中文字幕| a啊啊啊啊啊啊啊啊一区二区| 欧美色图自拍| 又黄又硬又粗又长国产视频| 欲香欲色综合天天伊人| 探花精品 一区二区| 久久9久久| 亚洲大色鬼| 九色 蝌蚪 熟女自 | 亚洲五月婷婷| 在线黄页看毛片| 六六久久日韩不卡| 五月丁香综合激情| 国产精品麻豆成人AV艾秋| 97操97色| 高潮嗯啊性感美女久久久| 黑人天8A∨高清网站| av优播| 美女的肌被草喷水视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲黑丝在线| 青青草日本中文字幕| 操亚州| 欧美精品欧美精品系列| 四虎免费在线观看| 中文字幕日韩专区精品系列| 曰本人妻人人澡人人夹| 97人人模人人爽人人| 一区二区三区精品黑丝白丝酒店对鸡| 亚洲s在线观看| 午夜欧美神马久久久久| 欧美肥臀在线| 欧美高清第一页| 香蕉久久AⅤ...| 久久精品99| 久久久久9久久久久| 精品一区二区三区四区外站| 日本天堂在线播放| 亚洲男人电影天堂| 久久夜黄色无码A级大片| 欧美精品999| 超碰 另类 欧美 | 国产精品久久久久久久久久梁医生| 18禁免费视频| 丁香五月婷婷色| 亚洲欧洲无码97久久精品| 超碰4A| 日本三级精品| 国产免a费看黄片在线| www久久国产精品| 亚洲Av噜噜一区二区三区妖精| 毛片电影一区二区三区| 成人 日韩欧美一区| 99热婷婷一区二区三| 8050午夜少妇无码| 欧美色图偷拍另类| 男人天堂网站| 国产乱伦亚洲| 97二区四区| 亚洲风情综合网| 亚洲乱色熟女一区| 欧美色图私拍91| 亚洲三级。日韩三级| 大黄片做爱的大的| 韩国轻伦国内自拍一区| 另类专区加勒比| 日韩人妻精品久久久久| 男人的天堂日本东京热| 国产精品久久久久无码Av网曝门| 色色激情| 亚洲激情欧美色图| 久久久久久国产手机AV| 蘋果手機免費看成人Av| 日韩成人在线性爱视频| 啊啊啊啊啊啊啊国| 1240青青草一区二区三区视频天爱| 亚洲?V高清一区二区三区尤物| 丁香六月激情综合| 亚洲中字慕不卡| 色嗨嗨在线| 九九九九九九九九九五码| 一中国女人毛片水真多| 91Chinese在线| 热久久无毒不卡| 加勒比久久综合网高清| 久久久久元码视频| 免费a级毛片av无码久久精品中文字幕| 人妻精品视频一区二区| 久久久久久裸体| 亚洲码在线中文在线观看| 久久9精品视频| 国产黄片在线免费观看| 欧美强奸乱能| 欧美熟妇人体| 一区二区三区探花在线观看| 国产精品成人蜜臀AV在线| 爱爱动态试试看6 0秒| 老熟女乱伦片| 一个人免费HD91视频| 久久久免费视频18| 日韩人妻一区二区精品| 亚洲图片视频小说| 欧美线天码中字| 涩亚洲欧洲| 在线啊v一区| 日韩亚洲美女一区久久| 日日97| 欧美日韩性爱视屏免费看了| 91亚洲欧美激情| 小泽玛利亚一二三| 手机看片91人妻| 国产三级中文有码在线视频| 婷婷20月天青娱乐| 久久久中文| 外站AV在线| 亚洲91网。| 18禁网站在线播放| 久久日韩肥臀| 一区二区三区国产精产| 日本免费人成视频播放120秒| 中文字幕一区二区三区蜜桃视频| 九九99久久| 中文?日韩?免费?精品| 欧美狠狠操| 久久久久亚洲?V片无码V| 正宗无毛一线天嫩逼| 91久久国产综合久久| CCYY草草影院地址入口| 国产精品久久久久999| 国产成人网址| 欧美日韩在线小说 | 无码二级三级| 大香蕉综合| 国产亚洲禁久一区二区| 97操| 9精品久久| 婷婷丁香五月综合| 岛国福利在线精品播放| 久久亚洲日韩熟女精品| 欧美成人亚洲精品| 国产成人+综合亚洲+天堂| 国内毛片热久久思思热| 成人资源中文字幕在线观看| 欧美性战999| 亚欧Av| 国产最新小视频在线播放下载| 啊啊啊慢点| 欧美另类自拍| 情侣开房子拍 日韩无码 女的很漂亮| 国产成年女人免费视频播放a| 久久这里只精品| 色妺妺在线视频| 韩国午夜理伦三级好看| 亚洲春色一区二区三区| 天天影视综合色| 啊啊啊好大好湿| 999久久久久久久精| 96久久精品一二三区色欲| 色网色网色网色网色网色| 久九9精品| 91亚州欧美| 国产精品老熟女一区二区| 国产97视频免费观看| 国产亚洲精品激情| 国产精品久久久亚洲第一牛牛_在线观看| 免费看污网站| 嗯嗯嗯啊啊在线观看| 性生活久久久久久久久久| 精品妇女一区二区三区| 日本无码1| 欲香欲色| 九九热免费国产视频婷婷伊人| 中字幕人妻一区二区三区| 97亚洲中文| 精品久操| 狠狠做深爱婷婷久久二区| 欧美色图私拍91| 大香蕉伊人网WWWn0n| 综合一区中亚洲国产成人综合精品| 国产乱伦亚洲色图高清无码| 国产农村妇女精品| 女优大全 - 91n| 欧美草草高清日韩视频| www欧美91| 亚洲九九视频| 67914在线兔费成人视频| 东京热99999| 欧美极品少妇| 老熟妇一区二区三区| 色97综合中文字幕| 98超碰日本| 人妻大相焦在线| 闷骚老熟女15P| 欧美性战999| 亚洲欧美九九九| 久久超碰大香蕉| 久久AV无码1区2区3区| 欧美激情视频一区二区三区不卡| 你操综合| 蜜桃精品一区二区三区ww| 国产极品999| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 色狠狠 - 百度| 国产aⅴ无码片毛片一级网站| 啪啪免费| 国产精品免费视频不卡| 婷婷久久综合久| 99热这里只有精品99| 亚洲男人天堂2019| 亚洲视频一二区| 丝袜高跟澳门91视频| 国产91丝袜 在线播放| 人人妻人人爽一区二区三区| 91成人18| 亚洲精品尤物yw在线影院| 老熟妇乱轮| 欧美综合自拍| 欧美Ⅴ性爱| 日本成人A片网站| 国产乱码精品一区二区三区四川| 操B在线观看| 懂色AV一区二区三区| 草久久久| 中文字幕免费在线观看| 大色综合| 精品中文字幕一区二区l - 百度| 色婷婷成人综合| 国产自产一区视频在线| 国产农村一一级特黄毛片| 97AV爱| 欧美一区二区在线资源| 欧美性五月| 亚洲国产97| 天堂俺去俺来也www久久婷婷| 亚洲一区二区中文字幕| 天美国产精品| 天天综合网~91综合网| 先锋女优在线观看视频| 干少妇视频| 成人乱人伦一区二区| 人人摸人人摸人人干| 人妻少妇久久久| 青青草乱入乱欲视频在线观看| 久久久噜噜噜久久人妻| 97在线观看| 成年人一级黄色毛片大全在线观看| 激情综合97| 99这里只有精品| 成人av性爱电影在线观看| av凤凰久久久| 欧美AB在线| 国产免费久久久久| 国产熟女二区| 亚洲人妻中文在线视频| 五月婷婷综合网| 丰满人妻一区二区中文| 超清福利精品视频在线| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 国产精品一级片在线看| 欧美激情总合网| 91熟女视频网| 97操| 五月丁香色综合| 国产一区二区在线看| αⅴ天堂| 亚洲三级网址久久最新| 91少妇人妻| 3p国产欧美99热| 中文字幕女同在线| 情趣丝袜无码操逼视频| 91久久久久久久| 欧美日日人人天天| 日本国产欧美一区三区二区| 97色在线| 亚洲图片小说欧洲| 无码伊人久久大杳蕉中文无码| 国产人妻一区二区三区欧美毛片| 日韩精品资源专区二区| 日韩在线视频1234| 亚洲人妻精品一区二区| 三级片网站在线播放| 天堂九九九九九九九九九| 欧美日韩色综合网| 青青操在线亚洲视频观看欧美在线 | 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 老司机福利青青草| 欧美九9 9 9| 亚洲天天自拍| 久久久婷| 久久久久久久久一区二区三区| 亚州操逼网| 国产精品毛片| 大香蕉综合网| 欧美翘臀视频网站一区二区三区| 丁香五月天视频| 亚洲色欧| 91一起操| 91人人操| 欧美另类色图片| 翔田千里AV无码秘 三区| 亚洲精品影视老司机| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 不卡一区视频| 秋霞影音一区二区三区| 欧美九一精品久久久熟妇| 亚洲AV免费在线| 九九九九九九九九九国产精品| 午夜丁香| 天天综合色图| 蜜臀精品1区2区| 操屄日韩| 日韩av熟女一区二区三区成人| 日本熟妇浓毛hdsex| 妇女视频网站| 国产精品无码av在线| 黑人粗大V S日韩女优视频| 操碰97| 91 欧美| 色婷婷综合久久久久中文一区二区 | 亚洲人妻一区二区三区| 人人操欧美风骚| 熟女自慰久久久| 国产精选三级在线观看| 天天干嫩逼网| 91色图片| 久久亚洲国产成人| 亚洲怡春院| 日韩精品区二区三区不卡| 国产日韩无码一区二区三区久久区| 91欧美巨乳| 色婷婷一区二区三区久久| 啊啊啊啊二区好大| 日韩丝袜二区| 校园春色亚洲| 无码久| 任你草| 一级一性爱免费视频| 精品176精品2| 激情五月天视频| 思思热在线视频免费| 91热色| 东北黄色电影| 人人操人人大香蕉| 亚洲国产精品久久AV| 九七毛片九九毛片| 伊人综合色网| 最近2018中文字幕在线高清第一页| 久草成人影片| 91色爽欧美| 久草五月| 强奸乱伦动态污图免费 | 女人的久久久| 日本色色色视频| 97精品久久| 亚洲天堂人人妻| 97精品久久久久中文字幕| 久久水蜜臀亚洲AV无码精品| BBBBB97COM| 欧美另类精品xxxx| 男女打扑克高清网站| 精品人妻视频一区二区三区蜜桃视频| 国产一区二区在线看| 国产精品美女在线一区| 亚洲天堂另类小说男人| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 色欲久久99国产精品久久久久久| 99久久精品无码一区二区毛片免费| 熟女视频久久| 99在线精品观看视频中文| 亚洲av综合色区无码一| 四季AV一区二区凹凸精品小说| 熟女探花啪啪| 国产久久久久久久久一区二区| 安徽熟妇视频| 综合五月天| 综合欧美日本三级| 久久黄色视频一区二区三区| 欧洲亚洲人妻无码高清久久三区四区| 九九九九九九九九九九九免费国产| 欧美视频一区二区在线| 国产91福利小视频在线观看| 亚洲区 欧美区| av无码av无码专区| 亚洲极品| 六月婷婷一区二区三区| 欧美日日夜夜| 天天影视网综合少妇| 精品久久久久av影院| 亚洲欧洲无码bt精品合集| 九九九九精品| 欧美日本成人一区二区| 国产操逼网站亚洲一级黄色| 黄页av| 夜夜黄| 九九九九精品在线| 国产精品乱码久久久久久| 成人一区二区三区四区| 久久久久久久久久久999| 在线观看视频91| 午夜后入| 久久精品99久久久久久| 97超碰人操| 久偷拍欧美日韩三区| ai欧美亚洲小说| 亚熟hd视频在线| 丝袜狠狠草尤物 91| 九九九九一级| 97超碰逼| 日韩av色图综合| 麻豆精品天美| 久久九精品| 99超碰网| 久夜视频| 一级性爱网| 国产亚洲精品久久久久小| 自拍偷拍草一草| 亚洲免费在线探花| 强奸乱伦动态污图免费| www久久99| 日韩情色视频| 宅男91视频在线播放| 91新在线欧美| 久久一本大香蕉| 少妇蹲下买菜露大唇0| 久久线上视频免费看| 人妻一区二区三区熟女| 国产日韩中文字幕欧美| 超碰2017| 亚洲国产精品9999在线观看| 日日操丁香五月天| 亚洲中文字母在线播放| 精品久久久亚洲AV成人网站| 青青网三级视频| 啊啊啊啊二区好大| 91色伦| 亚洲丝袜综合| 亚洲综合另类小说色区亚洲成av人片在www | 91狠狠综合久久| 综合网亚洲| 国产欧美一级在线观看| 久久久999日本大片| 亚洲一本色码中文字幕| 夜夜嗨一区二区三区三州加勒比| 国产精品一二三| 色悠悠伊人网五月天| 97无码视频在线播放| 欧美色www亚洲国产阿娇要播| 粉嫩绯色AV一区二区在线| 91爽啪| 麻豆国产第一| 啊啊啊啊好疼| AV在线性爱| 久久综合五月天| 日韩不卡网操逼中文字幕日韩| 国产在线激情| 国内毛片无遮挡国产| 操碰91| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 一本一道vs波多野结衣| 一级免费啪啪片| 中文字幕女同在线| 东京热毛片177b2viP| 日韩字幕一区| 99色在线| 老鸭窝黄色视频网站| 久久精品国产97欧美精品亚洲| 岛国毛片在线观看免费| 另类综合另类| 人妻天天爽夜夜爽2| 91av熟女人妻| 丁香婷婷大香蕉| 图色综合网| 综合色久欲| 在线播放免费av福利片| 青娱乐久久艹| 国产精品不卡一区二区三区| 麻豆久久一区二区三区| 亚洲1区2区三区高清中文字幕| 99亚亚热| 日曰骚久久精品| 特级特黄一级毛片免费| 久久蜜桃综合网| 蜜臀久久99精品久久久久久酒店 | 亚洲AO在线| 青青久久艹| 综合久久欧美| 中文字幕在线观看第二页| 夜夜高潮夜夜爽夜夜爱爱一区| 成人乱人伦一区二区| JULIA人妻风俗店中出电影| 欧美日韩亚洲少妇寂寞影院正在播放 | 免费αⅴ在线观看| 国产又大又粗又长视频在线| 九九九九久久久久| 亚洲中文字幕97久久精品少妇| 综合情欲网| 久草免费在线一区二区| 极品久久久久久久久久久久久久| 日韩欧无码一区二区三区免费不卡| 岛国黄色大片网站| 久久久精品视频欧州站| 国产啊v在线免费播放| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 草草电影院| 内射日韩大臀美女| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 成人丁香五月| 激情婷婷黑人91| 精品一区二区亚洲国产| 亚洲色天堂九9| 日日夜夜狠狠| 天天爱天天操| 亚洲丝袜二区| 97免费在线观看| 尻女朋友一夜| J?P?NESEHD熟女熟妇伦| 国产精品视频电影| 操国产逼| 亚洲一区日韩| 揉揉揉夜夜| AV大香蕉| 天天操天天干美女网址导航| 精品亚洲国产成人精品| 超碰97首页| 国产精品视频一区二区三区八戒| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 奶水 人妻 哺乳 在线| 狠狠操狠狠| 亚洲欧美校园| 91 手机在线播放 绯色| 人人妻人人澡人人爽人人精品浪潮| 日韩精品一区二区三区四虎影视| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 久久久久久久六六| 亚欧高清在线| 免费99精品国产自在在线| 久久色情| 私人尤物在线精品不卡| 加勒比在线视频| 国产精品盗摄 偷窥盗摄| 亚洲国产一级中文综合久久天堂在线免费观看| 欧美岛国精品在线观看| 国产精品视频| 91人人臊| 中文视频在线观看| 国产极品久久久| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 国产毛片久久久久久久| 女人18精品一区二区三区| 欧美爆操91| 超碰九7| 一级黄碟在线观看| 国产精品秘 福利姬在线观看| 久夜视频| 欧美日韩大陆黑人少妇99| 国产a级午夜毛片| 亚欧美色| 超碰欧美在线欧美| 亚洲欧洲美腿丝袜| 一区二区三区探花在线观看| 日日日日做夜夜夜夜做无码97| 精品国产一区二区三区av在线资源| 日韩中文字幕视频| 狠狠躁久久躁| 天美一二三在线观看Av| 亚洲国产高清福利视频| 亚洲学生妹高清av| 欧美日日人人天天| 久久激情五月| 黄页网站免费高清在线观看| 亚洲国产精品无石码久久| 日本精品一区二区三| 久久a久久| 国产一区二区三区影片| 秋霞一集毛片观看| 欧美色图99| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 精品日韩| 蜜桃久久久久久| 青青操狠狠撩| 国产精品麻豆免费视频| 国产白丝AV| 亚洲文学偷乱拍啪啪啪啪| 亚洲AV资源| 日韩国语字幕| 999国产精品999| av在线免费一区二区| 热思思免费视频| 清纯唯美综合| 骚鸭AV| 97视频在线视频| 亚洲 另类 丝袜 自拍 动漫| 97色五月天完| 五月婷婷综合网| 婷婷久热| 秋霞免费AV| 曰本人妻人人澡人人夹| 乱伦熟女专区| 中文字幕熟女人妻丝袜| 人妻夜爽夜夜爽| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 97精品97| 天色综合网| 久久手机好看网站| 九九热男人天堂| 一区二区三区精品黑丝白丝酒店对鸡| 婷婷五月天激情四射| 日韩精品碰碰| 欧美精品69性爱| 97无码视频在线播放| av中亚| 色欲天天综合久久久无码网中文| 香蕉精品二区二区| 男人精品天堂一区| 大香伊人在线一区| 亚洲一二三精品久久网| 高树玛利亚无码流出| 乱理日韩中文| 五十路熟女工口 | 综合在线导航一区| 一区二区中文| 久久久亚洲熟妇熟女| 日韩一卡二卡三卡| 男同专区一区二区三区在线| 精品视频久久| av天堂电影网| 天天射夜夜操| 九九九精品| 东北少妇高潮zzzz| 国产高清精品一区二区三区毛片| 日韩成年人性爱视频| 午夜福利无毒不卡| 国产日韩精品人妻久久久久色欲网站| 情趣丝袜无码操逼视频| 色综合天天| 无码操逼网| 中文字幕jul-617人妻熟女| 狠狠综合| n1038 一二三区| 欧美激情视频一区二区三区不卡| 日日日啊啊啊| 东方亚洲在线操逼天堂| 国产女主播视频在线观看| 欧美偷拍| 欧美成人精品一区| 国产在线能看的你懂的| 777琪琪午夜免费A片| 欧美成人AⅤ大片在线观看| 亚洲国产欧美中日韩成人综合视频| 91九九| 中 文字幕一区二区三四 五 区日 日 骚| 天天干天天日天天射黄色片| 色网综合网|