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

ARTICLE DETAIL

資訊詳情

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

Base64與Excel文件互轉(zhuǎn)實(shí)戰(zhàn):編碼解碼、內(nèi)存優(yōu)化與異常處理

Base64與Excel文件互轉(zhuǎn)實(shí)戰(zhàn):編碼解碼、內(nèi)存優(yōu)化與異常處理 接手這個(gè)需求時(shí)我第一反應(yīng)是“不就是一個(gè)編碼轉(zhuǎn)換嘛”但真正動手才發(fā)現(xiàn)Base64轉(zhuǎn)/解碼Excel文件這個(gè)需求背后涉及到文件讀取方式、內(nèi)存控制、跨端傳輸格式、異常數(shù)據(jù)攔截一整串問題絕不是幾行代碼糊弄一下就完事的。它最常見的業(yè)務(wù)場景是前端把一個(gè)Excel文件用FileReader轉(zhuǎn)成Base64字符串提交到后端接口后端解碼還原成.xlsx落地或者直接在內(nèi)存里解析Sheet內(nèi)容。反過來也一樣后端生成報(bào)表后轉(zhuǎn)成Base64返回給前端下載。這篇我把整個(gè)實(shí)現(xiàn)思路、代碼樣例、踩坑記錄都攤開講給后面遇到類似需求的你一份可以直接抄的作業(yè)。1. 項(xiàng)目概述與核心思路拆解1.1 為什么需要費(fèi)勁做“Excel轉(zhuǎn)Base64”很多人第一眼看到這個(gè)需求會問文件用傳統(tǒng)multipart上傳不就行了為什么非要多此一舉轉(zhuǎn)成Base64我做這個(gè)項(xiàng)目之前也是這么想的直到真正碰到接口約束才理解。最典型的情況是接口報(bào)文被設(shè)計(jì)成了純JSON格式你要在一個(gè)JSON字段里塞文件內(nèi)容二進(jìn)制數(shù)組顯然不行容易亂碼、截?cái)?、注入特殊字符。把Excel文件編碼成Base64二進(jìn)制數(shù)據(jù)就變成了一串由字母、數(shù)字、加號、斜杠、等號組成的可見字符串可以安全地放進(jìn)JSON的字符串字段、XML節(jié)點(diǎn)甚至直接存進(jìn)數(shù)據(jù)庫的TEXT列。這種文件載體在Webhook回調(diào)、消息隊(duì)列報(bào)文、開放平臺API里特別常見因?yàn)閳?bào)文本身就要做到純文本化傳輸。還有一個(gè)高頻場景是前后端分離后端返回一個(gè)Base64字符串前端用Blob對象接收拼接data:協(xié)議后直接觸發(fā)瀏覽器下載或者用FileReader讀出來預(yù)覽。這么做的好處很明顯——不產(chǎn)生臨時(shí)下載鏈接、不占磁盤空間、鏈接永不過期。對中小型Excel文件來說這套方案幾乎零成本。除此之外還有幾個(gè)實(shí)際使用場景值得提一下跨系統(tǒng)文件交換企業(yè)內(nèi)多個(gè)系統(tǒng)之間接口約定的數(shù)據(jù)格式就是JSON文件以Base64內(nèi)嵌傳遞。數(shù)據(jù)庫輕量存儲幾MB的Excel不想引進(jìn)MinIO、文件服務(wù)器之類基礎(chǔ)設(shè)施直接存庫省事。云函數(shù)/接口網(wǎng)關(guān)中轉(zhuǎn)函數(shù)計(jì)算平臺收到的入?yún)ⅰ⒊鰠⒁话闶荍SON文件體只能以Base64傳。日志追溯整個(gè)請求日志里能直接看到文件內(nèi)容片段排查問題比二進(jìn)制文件方便。注意Base64不是加密只是編碼。任何人拿到Base64字符串都能解碼還原原始文件所以真正敏感的數(shù)據(jù)一定要先加密再編碼千萬別裸著傳。1.2 方案選型為什么鎖定JDK自帶Base64技術(shù)選型上網(wǎng)上很多教程會讓你引Apache Commons Codec、Hutool這類第三方庫但我實(shí)際做下來發(fā)現(xiàn)根本沒這個(gè)必要。從JDK 8開始java.util.Base64已經(jīng)是一個(gè)功能相當(dāng)完整的工具類常用的幾個(gè)方法全部覆蓋方法用途關(guān)鍵差異Base64.getEncoder()標(biāo)準(zhǔn)Base64編碼末尾會補(bǔ)號Base64.getUrlEncoder()URL安全編碼把和/換成-和_Base64.getMimeEncoder()MIME編碼每76個(gè)字符插入換行對應(yīng)的getDecoder()/getUrlDecoder()/getMimeDecoder()解碼與編碼器互補(bǔ)JDK實(shí)現(xiàn)內(nèi)部有嚴(yán)格的字節(jié)校驗(yàn)性能也足夠好單個(gè)大文件編碼耗時(shí)基本可以忽略。引入一個(gè)第三方庫去處理本來就有原生實(shí)現(xiàn)的問題等于白白增加依賴體積和升級維護(hù)成本。我的結(jié)論是項(xiàng)目里沒有現(xiàn)成工具集依賴的話直接用java.util.Base64。另外選型時(shí)要把“文件級編解碼”和“Excel內(nèi)容級讀寫”拆開看。文件級就是把Excel文件當(dāng)作一個(gè)普通二進(jìn)制文件讀進(jìn)來、編碼出去完全不需要Apache POI。只有你需要動態(tài)生成Excel、修改單元格、解析Sheet內(nèi)容時(shí)才輪到POI上場。這兩個(gè)概念很多人混在一起導(dǎo)致引了一堆不必要的依賴項(xiàng)目變重。后面會順著這兩條思路分別給出完整代碼。2. 環(huán)境準(zhǔn)備與依賴選型2.1 基礎(chǔ)環(huán)境到底要準(zhǔn)備什么先說結(jié)論這次項(xiàng)目用到的運(yùn)行環(huán)境是JDK 8 Spring Boot 2.x但代碼本身不依賴任何Spring特性你拿純Java環(huán)境跑也完全成立。JDK 8 以上都帶java.util.Base64不需要額外配置。如果你只需要做“把現(xiàn)有Excel文件轉(zhuǎn)成Base64”以及“把Base64還原成Excel文件”這種文件級操作連Apache POI都不用引java.io和java.util.Base64就夠了。這時(shí)候的實(shí)質(zhì)就是一個(gè)二進(jìn)制文件讀寫的練習(xí)Excel格式本身根本不參與編碼邏輯。只有當(dāng)出現(xiàn)以下情況時(shí)才需要引入POI依賴后端代碼要創(chuàng)建一個(gè)全新的Excel文件寫表頭、寫數(shù)據(jù)然后轉(zhuǎn)Base64返回前端。前端傳上來的Base64后端希望解碼后直接讀Sheet里的行列數(shù)據(jù)做導(dǎo)入校驗(yàn)或落庫。需要對已有Excel內(nèi)容做修改比如合并單元格、改樣式再重新輸出。POI的Maven坐標(biāo)如下版本建議用5.x以上低版本對xlsx兼容性和內(nèi)存占用都不理想dependency groupIdorg.apache.poi/groupId artifactIdpoi-ooxml/artifactId version5.2.5/version /dependency引入POI之后它會連帶引入poi、xmlbeans等傳遞依賴這些是處理OOXML文檔結(jié)構(gòu)必需的不用手動管。2.2 文件級與內(nèi)容級兩條技術(shù)路線的取舍把這條區(qū)別講清楚大家后續(xù)少走彎路。場景依賴典型鏈路適用條件文件級編碼僅JDK磁盤.xlsx → 讀字節(jié) → Base64編碼 → 字符串文件已存在不需要改內(nèi)容文件級解碼僅JDKBase64字符串 → 解碼字節(jié) → 寫盤.xlsx文件落地即可不需要解析內(nèi)容級編碼JDK POIWorkbook對象 → ByteArrayOutputStream → Base64編碼代碼動態(tài)生成Excel內(nèi)容級解碼解析JDK POIBase64解碼 → ByteArrayInputStream → Workbook讀取需要解析單元格數(shù)據(jù)實(shí)際項(xiàng)目里兩種路線常常同時(shí)出現(xiàn)。比如我這次做的接口一部分入?yún)⑹乔岸藗鰾ase64字符串后端解碼后不落盤直接通過POI讀Sheet內(nèi)容做批量入庫另一部分出參是后端用POI生成報(bào)表轉(zhuǎn)成Base64返回給前端下載。所以雖然文件級編解碼本身不依賴POI但在同一套業(yè)務(wù)里POI基本還是跑不掉。選路線前先問自己一個(gè)最根本的問題這個(gè)Excel文件的內(nèi)容我需要操作嗎答案是不會就別引POI答案是會就老老實(shí)實(shí)加上。3. 核心實(shí)現(xiàn)一Excel文件轉(zhuǎn)Base64字符串3.1 四行代碼的初步版本先從最簡單的版本說起。把磁盤上的Excel文件讀成字節(jié)數(shù)組交給Base64編碼器拿到字符串結(jié)束。import java.nio.file.Files; import java.nio.file.Paths; import java.util.Base64; public class ExcelBase64Util { public static String encodeFileToBase64(String filePath) throws IOException { byte[] fileBytes Files.readAllBytes(Paths.get(filePath)); return Base64.getEncoder().encodeToString(fileBytes); } }這段代碼邏輯上沒錯(cuò)實(shí)際小文件場景完全夠用。但是有個(gè)隱患Files.readAllBytes()是一次性把整個(gè)文件加載進(jìn)內(nèi)存的。如果只是幾十KB的Excel內(nèi)存占用幾十KB無感??梢坏┪募搅藥资甅BJVM堆里先要騰出一塊和文件同等大小的byte數(shù)組接下來編碼后的字符串又要在堆里存在一份字符數(shù)組雙重占用下內(nèi)存容易報(bào)警。線上跑批處理時(shí)如果并發(fā)同時(shí)處理多份大ExcelOutOfMemoryError真的會找上門。所以我建議凡是文件大小未知、或者明確知道會超過5MB的場景直接跳到流式版本別用這個(gè)簡單版。3.2 面向大文件的流式編碼實(shí)現(xiàn)流式編碼的思想很簡單不要一次性讀完整份文件而是用固定大小的緩沖塊邊讀邊交給編碼器輸出。好處是整個(gè)過程不會同時(shí)把文件全量放在內(nèi)存里。代碼里用到了Base64.Encoder.wrap()它返回一個(gè)OutputStream往這個(gè)流里寫原始字節(jié)數(shù)據(jù)寫入過程中編碼器實(shí)時(shí)轉(zhuǎn)碼并輸出到指定的目標(biāo)流。public static String encodeFileToBase64Stream(String filePath) throws IOException { Base64.Encoder encoder Base64.getEncoder(); ByteArrayOutputStream result new ByteArrayOutputStream(); try (OutputStream encodedOut encoder.wrap(result); InputStream fileIn Files.newInputStream(Paths.get(filePath))) { byte[] buffer new byte[8192]; int len; while ((len fileIn.read(buffer)) ! -1) { encodedOut.write(buffer, 0, len); } } return result.toString(UTF-8); }這里面的邏輯鏈路是文件輸入流 → 8KB緩沖 → Base64編碼器輸出流 → 字節(jié)數(shù)組組裝 → 最終字符串。Base64.Encoder.wrap()返回的流非常關(guān)鍵它內(nèi)部已經(jīng)管理好了3字節(jié)→4字符的映射以及末尾的填充字節(jié)我們完全不用操心。實(shí)測下來相同文件用流式版本比用readAllBytes()版本的內(nèi)存峰值低不少尤其是當(dāng)文件超過10MB時(shí)區(qū)別非常明顯。代價(jià)是代碼多幾行但對于中大型文件這點(diǎn)復(fù)雜度完全值得。如果文件大到連最終字符串都不想一次性放內(nèi)存還可以把ByteArrayOutputStream替換成FileWriter直接寫文本文件把編碼結(jié)果流式落盤。再極端一點(diǎn)接一個(gè)SocketOutput流走網(wǎng)絡(luò)那就是流式上傳了。根據(jù)業(yè)務(wù)規(guī)模自己選。3.3 編碼后的字符形態(tài)和體積膨脹關(guān)于Base64的常見誤解之一就是“編碼后文件會變大多少”。這個(gè)有硬性數(shù)學(xué)規(guī)律Base64用6個(gè)bit表示一個(gè)字符原始數(shù)據(jù)是8個(gè)bit一個(gè)字節(jié)。每3個(gè)原始字節(jié)3×824bit編碼成4個(gè)字符4×624bit所以理論膨脹率是4/3也就是大約33.3%。舉個(gè)例子一個(gè)10MB的Excel文件編碼后的Base64字符串大小約13.4MB。如果這個(gè)字符串在Java里用String對象保存問題來了——Java的String內(nèi)部是UTF-16編碼每個(gè)字符占2個(gè)字節(jié)。于是這個(gè)13.4MB的字符串在堆里實(shí)際要占將近26.8MB。這就是我剛才強(qiáng)調(diào)流式讀取的核心原因10MB文件在最差實(shí)現(xiàn)下內(nèi)存可能膨脹到原始文件的三倍以上。編碼后的字符串通常長這樣這里只放個(gè)極短示意真實(shí)結(jié)果遠(yuǎn)比這長UEsDBBQABgAIAAAAIQBZXXXXX...前端用FileReader.readAsDataURL()生成的字符串還會帶一個(gè)data:頭部形如data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,UEsDBBQABgAIAAAA...這意味著后端拿到手的不一定是純Base64可能是帶MIME前綴的Data URL。解碼前必須先做清理第四節(jié)會專門講。4. 核心實(shí)現(xiàn)二Base64字符串還原Excel文件4.1 最基礎(chǔ)的解碼落盤反向流程同樣很直接拿到Base64字符串 → 解碼成字節(jié)數(shù)組 → 寫回磁盤。public static void decodeBase64ToFile(String base64Str, String filePath) throws IOException { byte[] decodedBytes Base64.getDecoder().decode(base64Str); Files.write(Paths.get(filePath), decodedBytes); }這段代碼有個(gè)前提條件base64Str必須是純Base64字符串不能帶data:前綴。實(shí)際業(yè)務(wù)里從前端、從第三方接口傳過來的值經(jīng)常帶著MIME前綴、換行符甚至被URL轉(zhuǎn)義過的字符所以這個(gè)簡單版本只能作為工具類內(nèi)部的一個(gè)最終落點(diǎn)真正對外使用時(shí)前面要加一層清洗邏輯。4.2 解碼后不落盤直接讀成Workbook很多后端導(dǎo)入場景的真實(shí)路徑是前端傳Base64字符串后端解碼后不想生成臨時(shí)文件而是直接解析Excel內(nèi)容做校驗(yàn)、入庫。這時(shí)候用ByteArrayInputStream轉(zhuǎn)成POI的對象就行了。import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Row; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.Base64; public class ExcelBase64Util { public static void parseBase64ToSheet(String base64Str) throws Exception { byte[] decodedBytes Base64.getDecoder().decode(base64Str); try (InputStream in new ByteArrayInputStream(decodedBytes); Workbook workbook WorkbookFactory.create(in)) { Sheet sheet workbook.getSheetAt(0); for (Row row : sheet) { // 這里按需處理每一行數(shù)據(jù) System.out.println(row.getCell(0).getStringCellValue()); } } } }WorkbookFactory.create()會根據(jù)文件頭的魔數(shù)自動識別這是xlsx還是xls不需要手動判斷擴(kuò)展名這一點(diǎn)很省心。整段代碼里解碼結(jié)果沒有落到磁盤不會產(chǎn)生臨時(shí)文件也就不存在“用完要清理”“多用戶并發(fā)寫同名文件互踩”這種額外麻煩。但要注意一個(gè)資源問題解碼后的byte[]還在內(nèi)存里Workbook對象本身又是一個(gè)復(fù)雜對象樹二者疊加內(nèi)存占用量是“原始文件 Workbook結(jié)構(gòu)化數(shù)據(jù)”的總和。所以這個(gè)方法更適合中小Excel大文件建議解碼后先寫臨時(shí)文件再通過FileInputStream交給WorkbookFactory避免內(nèi)存爆炸。順便說一句資源釋放一定用try-with-resourcesWorkbook用完不關(guān)會打開著底層文件句柄在Windows上會直接導(dǎo)致文件刪不掉。4.3 處理帶data前綴和其它臟數(shù)據(jù)前端readAsDataURL生成的字符串帶data:application/...;base64,前綴直接丟給Base64.getDecoder().decode()會拋IllegalArgumentException。所以對外接口的解碼入口第一件事就是清洗前綴。public static String cleanBase64Prefix(String rawData) { if (rawData null || rawData.isEmpty()) { return rawData; } if (rawData.startsWith(data:)) { int commaIndex rawData.indexOf(,); if (commaIndex 0) { return rawData.substring(commaIndex 1); } } return rawData; }注意這個(gè)函數(shù)只處理data:開頭的字符串處理邏輯就是找到第一個(gè)逗號并截掉它。要是逗號后面本身還混著換行符MIME編碼會出現(xiàn)那就在解碼前把所有\(zhòng)r和\n去掉String cleaned rawData.replaceAll(\\s, ); byte[] bytes Base64.getDecoder().decode(cleaned);不過強(qiáng)烈不建議無腦replaceAll(\\s, )。如果業(yè)務(wù)里合法Base64之間本來就可能有空格分隔清理倒是沒壞處但如果字符串里混進(jìn)了除空白外的非法字符那再這么干也救不回來不如讓解碼器直接拋異常暴露問題。5. 常見問題與排查技巧實(shí)錄5.1 高頻異常對照速查表做這種文件傳輸接口最有價(jià)值的沉淀就是異常庫。我把這次項(xiàng)目中遇到過的、社區(qū)里高頻出現(xiàn)的問題統(tǒng)一整理了一張表遇到同類情況直接對照定位。異?,F(xiàn)象大概率原因解決思路IllegalArgumentException: Input byte[] should at least have 2 bytes入?yún)⑹强沾驑O短字符串解碼前校驗(yàn)非空攔截短串IllegalArgumentException: Last unit does not have enough valid bits字符串被截?cái)?、字符缺失檢查來源鏈路是否完整傳參確認(rèn)無截?cái)嘟獯a后文件打不開字符串經(jīng)過URL編碼被解碼成空格用URLEncoder/URLDecoder對做處理或保證走JSON傳輸解碼后文件不是Exceldata:前綴未去除調(diào)用cleanBase64Prefix解碼報(bào)錯(cuò)但文件頭正常Base64里混入換行符去除\r\n內(nèi)存溢出OutOfMemoryError一遍讀全文件編碼StringWorkbook三倍膨脹換流式方案或在網(wǎng)關(guān)限制文件大小文件能打開但Sheet解析異常Excel本身損壞或假Excel用文件頭魔數(shù)校驗(yàn)再用WorkbookFactory捕獲異常這張表里第三行最陰險(xiǎn)。Base64里是有字符的一旦字符串被塞進(jìn)URL的query參數(shù)接收端用URLDecoder.decode()解析時(shí)會被當(dāng)作空格還原導(dǎo)致整串Base64被改得面目全非解碼出來的文件自然損壞。這個(gè)坑我實(shí)打?qū)嵅冗^排查了很久才發(fā)現(xiàn)是中間網(wǎng)關(guān)對參數(shù)做了URL解碼。5.2 實(shí)戰(zhàn)排查案例前端傳值中途被篡改項(xiàng)目里有一個(gè)導(dǎo)入接口前端用FileReader把xlsx文件轉(zhuǎn)Base64POST到后端后端解碼落盤。上線后連續(xù)收到幾個(gè)用戶反饋說報(bào)表文件下載下來打不開。排查過程如下。第一步先在后端把解碼后的字節(jié)數(shù)組長度和前端聲明的文件長度對比發(fā)現(xiàn)明顯偏小。第二步打印Base64字符串前60個(gè)字符發(fā)現(xiàn)開頭是data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,說明前端直接傳了Data URL格式而后端解碼前沒清前綴。第三步全局搜索解碼入口發(fā)現(xiàn)有好幾處都在各自解碼其中兩處忘了清前綴。修復(fù)方式是把所有解碼入口收斂到一個(gè)工具方法統(tǒng)一先清洗再解碼問題立刻消失。這個(gè)案例給兩個(gè)教訓(xùn)第一前后端文件傳輸一定要對報(bào)文格式做統(tǒng)一約定究竟是Data URL還是純Base64必須項(xiàng)目初期就定死第二解碼邏輯一定要收攏成公共工具類不要散落在各個(gè)Service里否則漏清洗前綴的問題防不勝防。5.3 用文件頭魔數(shù)校驗(yàn)Excel真?zhèn)芜€有一個(gè)我認(rèn)為每個(gè)文件處理接口都該做但很多人忽略的步驟文件頭校驗(yàn)。用戶上傳的文件名字是.xlsx不代表它真的是Excel。真實(shí)世界里把一張圖片改名成.xlsx、把一個(gè)zip壓縮包改名成.xlsx、甚至把一個(gè)txt改名成.xlsx的情況一點(diǎn)都不罕見。如果不做校驗(yàn)POI解析時(shí)會拋出一堆讓人摸不著頭腦的異常。xlsx文件本質(zhì)是ZIP格式它的文件頭固定是50 4B 03 04也就是ASCII字符PK開頭舊版xls文件是OLE2復(fù)合文檔格式文件頭是D0 CF 11 E0 A1 B1 1A E1。解碼后拿前幾個(gè)字節(jié)比對魔數(shù)幾行代碼就能過濾大多數(shù)臟數(shù)據(jù)。private static boolean isLikelyExcel(byte[] header) { if (header null || header.length 8) { return false; } boolean isZip (header[0] 0xFF) 0x50 (header[1] 0xFF) 0x4B; boolean isOle (header[0] 0xFF) 0xD0 (header[1] 0xFF) 0xCF; return isZip || isOle; }這個(gè)方法在解碼后立刻調(diào)用效率極高。命中了再用WorkbookFactory.create()去解析更深層的結(jié)構(gòu)。別指望文件頭校驗(yàn)解決所有問題它只是把最基礎(chǔ)的類型錯(cuò)誤擋在門外Excel內(nèi)部結(jié)構(gòu)是否完整、文件是否被截?cái)噙€得靠POI解析過程去驗(yàn)證。5.4 大文件傳輸?shù)男阅芘c內(nèi)存策略在實(shí)際項(xiàng)目里我建議以20MB為界來設(shè)計(jì)策略。為什么要定20MB因?yàn)锽ase64之后的膨脹率33%加上String對象UTF-16的2字節(jié)存儲翻倍再疊上POI的Workbook對象樹三層內(nèi)存膨脹下來一個(gè)20MB文件在服務(wù)端峰值占用量可能超過100MB。要是并發(fā)十個(gè)人同時(shí)上傳20MB文件JVM不被撐爆也會頻繁GC卡頓接口RT直線上升。具體可以做的防線有這幾條網(wǎng)關(guān)層或Controller層限定單次Base64字符串長度超長直接返回“文件過大”提示。超過閾值的大文件改用分片傳輸或者改傳統(tǒng)multipart上傳不要硬用Base64整包傳。解碼前提前估算解碼后字節(jié)數(shù)base64Str.length() / 4 * 3如果余數(shù)為0則正好將此結(jié)果作為預(yù)檢值。大文件解碼后落臨時(shí)文件讓POI從文件流讀取而不是一次性把整個(gè)字節(jié)數(shù)組和Workbook同時(shí)留內(nèi)存。異步化處理導(dǎo)入任務(wù)請求只負(fù)責(zé)接收和應(yīng)答“處理中”真正的解析放到隊(duì)列里跑避免請求線程被大文件拖死。這些策略不用全上根據(jù)你業(yè)務(wù)的并發(fā)量和文件大小挑一兩樣即可。最怕的是明知道文件很大還全量進(jìn)內(nèi)存那性能和穩(wěn)定性只能聽天由命。6. 實(shí)操心得與擴(kuò)展思路6.1 這次項(xiàng)目沉淀下來的幾點(diǎn)經(jīng)驗(yàn)把Base64轉(zhuǎn)/解碼Excel文件這個(gè)需求從頭到尾捋一遍我最大的體會是這類需求的技術(shù)難度并不高但容錯(cuò)設(shè)計(jì)決定了上線后的穩(wěn)定性。表面上看四行代碼能完成的工作實(shí)際上圍繞“前端來的字符串干不干凈”“文件是不是真的Excel”“內(nèi)存撐不撐得住”這三個(gè)問題至少要增加一半防御性代碼。另外封裝的邊界也很重要。我最后沉淀出來的ExcelBase64Util工具類是這樣的結(jié)構(gòu)入?yún)⒔y(tǒng)一是原始字符串或文件路徑內(nèi)部先清洗、再解碼、再校驗(yàn)文件頭最后輸出字節(jié)數(shù)組或Workbook對象。調(diào)用方不需要關(guān)心前綴、換行、魔數(shù)這些細(xì)節(jié)接口一調(diào)就完事。這樣做的好處是后續(xù)如果需要增加分片傳輸、AES加密、壓縮邏輯只需要在工具類內(nèi)部擴(kuò)展不會牽連業(yè)務(wù)代碼。6.2 這個(gè)需求還能怎么擴(kuò)展如果你所在的項(xiàng)目遲早也會碰到類似需求這幾點(diǎn)擴(kuò)展方向可以提前思考。文件加密傳輸先把原始字節(jié)用AES加密再Base64編碼能規(guī)避“Base64裸傳等于明文”的風(fēng)險(xiǎn)。解密順序反過來先解碼再解密注意密文和明文的長度校驗(yàn)。大文件分片把Base64字符串按固定長度切成多段每段加上序號和總段數(shù)接收端收集完整后拼接。這個(gè)方案能突破字符串長度限制但要自己維護(hù)組裝狀態(tài)復(fù)雜度上升不少。壓縮預(yù)處理如果Excel里大量圖片、日志型文本導(dǎo)致文件很大可以先壓縮成zip再轉(zhuǎn)Base64接收端解碼后解壓再處理。xlsx本身是zip二次壓縮對純文本表格收益不大但對混合內(nèi)容的場景有意義。結(jié)合前端Blob后端返回純Base64字符串前端fetch拿到JSON后用atob配合Uint8Array構(gòu)造Blob再觸發(fā)URL.createObjectURL下載文件。這套鏈路不產(chǎn)生任何臨時(shí)文件用戶下載體驗(yàn)很干凈。最后再分享一個(gè)小技巧調(diào)試階段不要把Base64字符串打印到日志里十幾MB的字符串會把日志系統(tǒng)直接拖垮。要打印的話只打前80個(gè)字符和總長度足夠判斷格式問題又不傷日志。我見過同事把完整Base64打出來排查一條日志十幾MB把日志文件都給撐爆了后來全組引以為戒。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
九七人妻在线| 中文?日韩?免费?精品| 日韩97视频!在线| 中文欧丝袜诱惑| 97在线精品观看视频| 国产超碰在线一区| 九九精品99| 无码男人天堂| 亚洲中文日韩精品| 99夜夜操| 爱爱动态试试看6 0秒| www欧美性爱| 美女诱惑久久| 美女久久久久久久| 黄色大香焦1级‘′‘| 亚洲一区制服诱惑| 黄色不卡视频| www色色色com| 国产无码精品久久久久久| 毛片视频白嫩| 一区二区三区黄片免费观看| 永久免费观看的毛片的网站| 99亚洲人人| 人人乐大香蕉| 中文字幕123| 爱逼综合| 中文字幕乱偷人妻久久艾草网| 日韩欧亚太美不卡| 欧美综合区| 成年无码动漫av片无尽在线| 亚州欧美在线| 狠狠亚洲| 亚洲天堂性爱| 99久久综合网| 精品亚洲国产成人精品| 天天躁日日躁成人字幕aⅴ| 男人的天堂三级| 麻豆天美国美国产| 成视频在线观看免费看| 国产浮力影院第1页| 亚洲黄色网址视频| 中国探花熟女| 性爱视频久久| 极品极品色影院| 99精品久久久久久久婷婷蜜桃| 久久精品人妻一区| 亚洲欧美在线丝袜| 亚洲天堂久| 91久久久视| h在线看免费版在线看| ,成人免费啪啪视频| 亚洲AV无码翔田千里网站| 久久av无码| 成人九九| 久久久一二三四区| av橘色网站| 怡红院成人av| 刺激精品视频| 大香蕉中文aV在线| 色婷婷一区二区三区久久午夜| 天天透伊人| 一道本东京热加勒比一区二区三区| 2020中文字幕| 欧美激情综合| 欧美极品女人的天堂| 97人肏| 综合网,亚洲,欧美| 久久亚洲熟妇在线视频| 久久老女人| 91少妇高潮| 狠狠干妹子| 久热精品在线| 国产日韩区| 翔田千里av一区二区三区| 国色天香av| 美美91成人国产精品欧美精品久久久久久久| 青木玲在线不卡| 人人搡人人肉久久精品| 91n处女在线观看| 欧美熟女妇同| 国产精品久久久久久久久久久久久久吹 | www.99在线| 国产日韩欧美三级片| 97天天爽| 久操免费电影| 欧美东京热精品A∨| 中文字幕 av v| 亚拍在线| 日韩亚洲中文字幕在线| 五月丁香色婷婷| 久久久月天| 久久精品欧美一区蜜桃| 国产av色网| TS人妖另类精品视频系列| 多毛小伙内射老太婆| 天天做天天爱夜夜爽毛片试看| 骚女天天综合网| 涩涩涩综合| 免费看毛片操穴| 天天干2区3区| 91爱剪切久久| 色呦呦、国产精品| 精品国产国产AV| 久久精品无码一区二区三区| 人人做人人妻人人夜视频| 丁香成人五月天| 91国精产品| 无遮挡又黄又刺激的视频| 正在播放国产精品一区| 欧美五区| 亚洲精品尤物yw在线影院| 91neishe| 伊人久久综合精品欧美| 天天激色| 久久国产免费激情视频| 亚洲色图加勒比| 外站AV在线| 九月丁香| 色图四区| 久久久精品日本一道| 亚春色色| 99久久无色码| 日韩字幕一区| 精品国产一区二区三区久久久蜜臀| 亚洲欧洲日韩中文字幕一区| 日韩无码专区| www.91视频网| 热天堂一区二区| 国产精品女aA片爽爽视频| 欧美色三级片91| 久久久久久九| 观看免费区二区三区二| 午夜超爽| 久久人妻一区二区三区高清| 一区二区三区黄片免费观看| 午夜精品人妻二区三区| 久久 国产精品 一区| 97欧美日韩精品| 色婷婷视频| 亚洲小说视频| 日韩熟女精品无码专区一区二区| 性爱视频免费网址| 好看的久久不射无码影视影院| 97这里只有精品| 亚洲精品一二三四区| 日韩极品无码B| 日韩ab网| 日韩免费性爱视频在线观看| 97天天日| 亚洲棕合电彰| 2021久久国产综合精品青草| 日1区2区3区2020| 久久婷婷色| 91天天综合网| 欧美一品道| 99无码视频| 在线日韩精品一区二区三区| 美日韩一二三区| 人妻少妇av在线观看| 男人久久天堂| 亚av顶级裸体一区二区三区四区五区 | 久久97精品久久久久久久不卡| 九九久久国产精品| 一牛影视久久久一区二区三区| 亚洲国产欧美另类自拍| 欧美日本天堂| 久久黄黄| HEYZO高无码国产精品227| 亚洲国产精品成人久久蜜臀| 视频在线97| 96AV久久久| 性无码专区2020| 欧美亚洲综合999| 91色情黑丝搞鸡在线观看一区二区三区三州| 久久精品国产亚洲粉嫩| 天天综合网1| 欧美日韩国产在线| 五月天玖玖资源站| 狠狠操官网| 成人精品一区二区三区| 丁香六月激情综合| 久久社区一区二区三区| 欧美不卡在线一区二区| 色香AV| 熟妇无码视频三区| 中文字幕文字幕无码一区二区三区电影99| 日本在线一二| 丁香五月婷婷基地| 人人操av| 超碰在线看| 一二三四视频中文字幕在线看| 超碰97国产欧美| 91性感网站| 麻豆久久久久久久久丝袜| 99久久网站| 免费观看的黄色的网站| 免费?级毛片无码?∨蜜芽试看| 色图综合网| 中出后入| 欧美天天综合站| 草伊人高潮喷水超碰| 亚州色图第三区| 国产人妻天天干精品| αⅴ天堂| 91校园春色长篇| 国产精品探花视频| 日va操| 日韩精品免费高清视频在线| 很黄很色的视频在线观看| 韩国一级做a久久久久| 精品无码秘 人妻一区二区| 97伦综合| 九九久久久| 亚洲高清综合网| 欧美人妖内射| 中文字幕在线免费观看 | 加勒比aⅴ| 日韩在线观看AV| 青青操日韩| 高清孕妇孕交 交孕妇| 欧美色综合图片| 精品综合久久久久久97| 超碰欧美COM| 日天天九九天堂666| 97在线观看| 天天射天天| 极品综合| 青青操网| 亚洲精品人妻在线| 六月丁香婷| 99色| 97超碰中文字幕| 日韩有码中文字幕女同性恋 | 日本操逼二区| 婷婷色中文字幕| 国产欧美日韩女同性恋ww喷水精品| 美女尤物福利视频| 国产诱惑| 秋霞一集毛片观看| 操B在线观看| 丁香五月天啪啪| 一区二区三区 丝袜 高跟 美腿 | aaaa少妇高潮大片| 亚洲精品 大香蕉| 91最新综合| 91色色综合| 亚洲97精品| 国产欧美在线观看免费观看| 亚洲欧洲日韩国产自在线| 麻豆天美国美国产AV| 插老姨肥穴| 久久精品噜噜噜成人看免欧美大片| 91亚洲情色| 高清无码一区二区三区| www激情| 亚洲国内精品成人不卡| 丰满人妻区一区二区三| 欧美一区二区亚洲天堂| 99热aaa| 久久中文字幕在线观看| 1禁看欧美黄片免费看| 婷婷久久综合| 韩国嫰模上门援交视频| 2023天天操夜夜操| 丁香婷婷色五月| 搞中出视频在线观看| 天天日天天干少妇日| 久久‘黄片视频| 日本伦理一区二区| 亚洲毛片基地专区| 大香蕉五月天| 99热国产| 国产精品女久久久久av爽| 最新一二三区视频| 国产精品久久久久久亚洲色欲| 国内三级自拍小视频在线观看 | 久久美女国产| 国产传媒1234区| 久久中文字幕在线观看| av天堂影视中文在字幕在线中文| 无码精品啪啪啪一区二区三区三州| 人人操,人人插| 国产人伦精品一区二区三区| 精品999一区二区| www网站黄| 在线小视频| 国产JDAV无码视频在线观看| 啊啊啊啊啊在线视频| 91另类| 九九无码久久精品视频| 亚洲欧美日韩中文播放| 色五91| 亚洲高清欧美总合| 可以免费观看的av| 97伦综合| 床上啊啊啊一区二区三区| 亚洲天天更新| 欧美一二在线| 人人操人人干网页| 久久久久网站-538在线视频-欧美永久乱码 | 欧美第二页| 人人爱操| 婷婷av在线中文字幕| 一个人在线看的黄色电影网站| 试看日韩黄片| 久久一本大香蕉 | 麻豆这里只有精品| 黄页av| 日本熟妇一区二区三区| 青草综合| 国产白领连续中出在线播放| 天美麻花大全视频| 操碰97| 欧美精品丝袜久久久中文字幕| 豆花视频操逼网址| 综合激情一一91| 日韩三级天堂在线观看| 日韩欧美传媒一区国产| 成人AV素股で擦久久| 久9re热视频这里只有精品| 99啪啪| 嗯啊抽插大香蕉网页| 超碰97欧美日韩| 日本理论在线| 天天干天天操天天操夜夜操天天操| 婷婷三区| 欧美麻豆成人同性GⅤ在线| 91熟女丨老女人| 成人色女网| 欧美丝袜制服久久| 久久超碰网| 久久久中文版| 99亚洲天堂| 精品日韩人妻视频| 97 国产精品| 人人喜人人妻| 日本一区二区不卡精品| 亚洲国产另类在线中文| 蜜桃网熟妇| 色999偷自拍拍| 黄片aaaaa一区| 天天综合欧美| 亚洲色图第四色| 欧美另类色图片| 日韩卡一卡二卡三在线| 91欧美亚洲| 在线黄色污污网站| 久久极品一区二区| 日韩国产乱子伦App| 九九九九九九九九九国产精品 | 强奸乱伦AV一天堂网| 粉嫩久久久极品| 久久不卡一区二区| 91性高潮久久久久久久久| 成人26uuu| 91女色| 免费99精品国产自在在线| 国产suv精品一区二区四区999 | 色哟哟AV| 免费国产| 校园春色综合香蕉| 青青草精品| 999狠狠综合| 亚洲欧洲网站免费观看| 超碰成人最新最好看| 亚洲av无码国产精品字幕| 亚洲黄色AV电影| 蜜桃臀一区二区三区久久| 欧美 青青草| 熟妇熟女亚洲天堂网| 人妻-91porn| 波多野结衣先锋影音| 亚洲无码 国产无码| 男人的天堂VA| 日韩十八禁| 中国91AV| 久久久日本电影| 欧美综合综合| 大香久久| 青草成人免费视频一COm| 亚洲综合色图欧美| 国产日韩怡红院| 麻豆天天躁天天揉揉AV| 超碰诱惑| 天天爽天天操啊啊啊| 欧美熟妇色| 超碰人人干天天射| 亚洲a色| 97超碰精品图片| 人妻激情视频| 亚洲丝袜诱惑| 国产乱伦视频污| 欧美国产精品久久九九| 日韩性爱一级片| 在线播放成人高清免费视频| 欧洲综合无码| 亚洲制服aⅴ中文字幕| 强奸乱伦中文字幕AV| 懂色天天爱天天日天天射天天澡| 爱av免费| 香蕉大久久久| 超碰天天去日穴| 色综合91好| 欧美色999| 国产二区三区免费视频| 欧美黄片视频在线观看免费| 97亚洲国产影视| 中文字幕视频2区| 欧美日动态视频| 91久久精品美女高潮喷水| 久久久91| 丁香六月激情| 久久ww| 禁止观看美女黄| 美女黑人91神马| 亚洲素人综合| 国产无码精品成人| 人人摸人人干人人拍97| 久都青青视频| 久久偷偷色综合蜜桃| 中文字幕视频二区| 欧美色性爱| 五月婷在线| 黄总AV色图| 亚洲天堂少妇| 91AV入口| 超碰人人干| 大香蕉在线86| 91丰满| 亚洲?V无码专区在线电影| 牛黄色久午久| 久久亚洲熟妇在线视频| 狠狠爱大香蕉| 五月综合婷婷久久网站| www.91欧美| 久久系列| 爱媛媛久久国产福利| 在线啊啊啊啊| 在线播放中文字幕| 国产十八禁视频| 久久超碰网| 国产精品久久久久综合| 午夜福利在线合集| 人妻一区二区三区视频| 丰满人妻一区二区三区在线| 一二三区精品视频| 韩国一级做A片免费的| 九九九久久久久| 国产h小视频在线观看免费| 国产又爽又黄| 亚洲不卡一| 亚洲三区视频| 99热aaa| 99婷婷一区二区| 五月综合久久| 精品国产a∨一区天美传媒| 超碰国产精品久| 嗯……啊…嗯嗯…啊…好舒服| 亚洲丝袜在线观看| 五月婷丁香| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 免费簧片在线观看| 色香在线| 欧美精品日韩久久久九| 欧美aⅴ99久久黑人专区| 免费岛国一级片| 天天综合网一91网| www.男人的天堂| 丁香九月激情啪| 亚洲女人毛茸茸91| 91粉嫩萝控精品福利网站_精品影音先锋国 | 亚洲少妇色图自慰直播| 国产精品白丝在线播放| 亚洲色图欧美另类在线| 99精品欧美一区二区三区桃色| 天堂在线一区二区| 国产精品呦一区二区三区| m欧洲一级午老| 999综合色| 成视频在线观看免费看| 日韩欧美成人性爱在线| 蜜桃久久久久久| 日日爱99| 97视频620| 韩国一级婬片A片无码天美| 国产精品视频播放| 殴美大黄片| 青青草在线视频播放器| 粉嫩国产精品久久粉嫩| 俺去啦俺来也久久综合| 中文字幕一区二区三四五区日日骚| 吖在线不卡一区二区国产剧情| 97精品久久久久中文字幕| 欧亚性爱视频免费看| 中国少妇啪啪视频| 暖暖精品二区三区观看| 精品午夜福利国产一区二区在线观看| 亚洲天堂资源| 95精品在线| 日本黄色大片一级视频免费麻豆| 91亚洲狠狠色| 91 国产丝袜在线放观看| 蜜乳AV.COM| 新怡红院| 国产久久日韩网站导航| 天天色播亚洲综合网站| 蜜乳中文字幕a在线| 日韩精品国模| 91久精品| 黑人无码一区二区| av网站在线看| 国内精品久9| 亚洲情色婷婷五月天| 乱伦图av| av毛片aaaaa免费看| 精久久久| 一区二区三区四区久久视1| 欧美久久伊人| 日韩成人性日韩成人性爱视频在线免费观看| 欧美亚洲se91| 熟女丰满人妻一区| 国产激情在线| 日韩性爱视频在线免费观看| 蜜臀99久| 国产自偷| 欧美久久久| 97精品国产97久久久| 大香蕉久| 国产狂喷潮在线精品| 久热这里| 色哟哟精品1精品2| surenchaopeng| 亚 欧 美 综合| 每日更新AV| 俄罗斯一区二区视频在线观看| 91无码精品| 中文字幕欧美日本乱码一线二线| 成人天天看站长推荐| 碰碰在线视频| 99在线免费观看| 欧美激情中文字幕另类小说| 强奸乱伦亚洲第一页| 粉嫩av在线| 久久精品超碰| 亚洲综合有码| 日韩AV噜噜噜一区二区三区四区 | 国产人人干| 欧美亚洲美少妇一区二区| 久热久一区二区三区| 亚洲成人av色网| 天天插天天射| 激情综合网激情五月天| 婷婷丁香久久| 人人操AV| 亚洲天天艹| 校园春色综合| 亚洲欧美九九| 9久久9综合| 91九色丨国产丨爆乳| 亚洲日韩肥臀视频在线观看| 久久久影院| 久操高青| 另类av天堂| 亚州色图欧美| 人人摸人人舔一区二区| 91青青在线视频| 精品一区99999| 亚洲91射| 丰满人妻-区二区三区| 人妻丝袜日本| 乱伦一二三| 岛国片在线播放| 涩涩这里只有精品视频| 亚洲最大的综合性av| 欧美综合区| 日韩熟妇二区| 亚州乱码中文字幕综合久久久| 中文幕97| 97精品一区二区视频在线观看| 欧美色网络| 思思久热在线精品66| 国产一级内射无挡观看| 粉嫩在线一区二区懂色| 大奶啊啊好爽 | 麻豆国产97在线| 人人艹亚洲| 亚洲第一在线视频| 宅男91视频在线播放| 亚州春色| 久久一区二区蜜桃| 欧美午夜视频免费观看| 三级片网站在线播放| 亚洲欲色9532548967一区| 啊啊啊啊啊在线视频| 久久久九九| 91香蕉国产尤物视频| 人人操人人插人www| 成人丁香五月| 制服少妇欧美| AV中亚| 人人操人人插人人摸人人干| 久热伊人| 91精品久久久久久77777| 日韩熟女精一区二区三区不卡| 91丨九色丨国产丨人妻在线| 天天爽天天操| 99爱爱| 98人妻精品一区二区色欲 | 91热热色| 日韩av不卡在线看| 久久超碰久| 中文字幕无码不卡啪啪| 国产精品分类在线观看| 五月综合色| 国产精彩女在线观看视频| 欧美91在线| 久久 国产精品 一区| 欲香欲色天天天综合和网| 久久岛国| 黄色av一区二区在线| 97日视频| 人妻二区| 久热69九色熟妇97| 久久99九九九九6666免费观看软件| 蜜乳Av成人片网站| 97se综合网| 亚洲日韩国产精品| 日本天天色| 人妻丰满熟妇av无码区蜜桃| 日韩欧美国产一区二区三区四区| 91新在线欧美| 12一15性XXXX粉嫩国产| 红杏大香蕉| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 精品妇女一区二区三区| 9 1果冻精品视频| 日韩av一级黄片| 综合九九| 在线观看色视频| 亚精品无码毛片一区二区三区| 国产精品麻豆成人av| 欧美色图亚洲色图成人在在线| 91精品人妻一区二区三区蜜臀| 久久激情网| 久久亚洲一区二区色婷婷| 黄色一级视| 亚洲熟妇白浆无码AV| 久久久久国产一区二| 蜜桃臀久久| 国产AV久久久蜜爱影集| 久久久精品,3| 精品久久久久久亚洲| 香蕉视频精品亚洲一区二区三区在线播| 中日高清无码操逼视频| 久久老熟女| 欧美另类色图片| 探花精品 一区二区| 91人人爽人人爽| 欧美高清无码免费视频高清版| 九九九久千久久激情蜜桃在线看| 一级AV性爱| 国产九区| a在线视频免费观看| 日本大香蕉综合网| 精品无码一区二区| 8x福利精品第一福利视频导航| 蜜桃视频一区二区三区| 九月丁香综合网| 亚洲久久天堂| 精品99999久久久久久| 久久 国产 无码| 风月影院男女十八禁| 超碰在线成人| 国产资源中文字幕在线| 男人的天堂在线| 国产精品老师| 国产精品点击进入在线影院高清 | av网站国产主播在线| 色超碰综合| 成视频在线观看免费看| 午夜性刺激视频免费观看| 久久有码| 五月天婷婷小说| 八戒午夜福利理论片| 日韩中文9| 色97| 色乱二区| 国产在线观看一区二区三区| 成人天天爽| 私色综合网| 国产女乱淫真高清免费视频| 91 偷| 九一精品牛牛一区二区| 99久re热视频精品98| 日本黄色精品专区网站| 超碰色大香蕉| 亚州高清色综合| 草草影院在线视频| 极品尤物自安慰| 国产强奸乱伦第1页| 亚洲日韩熟女人妻高清在线| 伊人久久青青草| 亚洲日韩国产欧美综合v| 新亚洲无码| 日本三级精品| 日本中文字幕熟妇| 欧美爆操91| 99色综合| 久久艹逼视频| 思思热国产在线视频| 99无码狠狠久久| 骚货操死你| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 91精品丝袜久久久久久| 国产一区二区久久| 97综合日韩| 日韩另类色图| 婷婷激情五月| 九九综合久久| 乱伦AVxx| 高清无码 国产精品| 日本性交操一区二区不卡系列| 国产精品视屏| 亚洲高清综合网| 国产后入式在线观看| 老司机午夜精品福利视频一区二区| 日日干夜夜操视频h| 久久久久精| 久久99操天天日| 91操操| 超碰国产在线| 99操视频| 婷婷久久综合久| 久热大香蕉| 丁香五月天堂| 婷婷色网| 色欧美天天| 久久久一区二区三区四曲免费听| 婷婷综合五月| 日韩人妻资源在线看| 992这里有精品| 欧美拳交在线播放| 久久久久久久一级黄色打同平台| 啊啊啊啊嗯嗯嗯用力好爽| 五月天综合| 麻豆天美电影一区二区| 综合国产97| 99啪啪视频| 久草毛片电影怡| 天天看高清麻豆| 99热8| 2017,超碰| 91色狼| 日本人妻伦在线中文字幕| 91人妻最真实刺激绿帽| 黄页网站免费高清在线观看| 亚洲第一在线视频| 色婷婷丁香五月| 91老司机在线视频免费观看| 插老姨肥穴| 天天综合网~91综合网| 人人操人人精品影片| 日韩99999| 狠狠操狠狠操操| 亚洲激情在线观看一区| 久久久久久久国产a∨| 日韩精品一区的| 1区2区3区在线视频| 白丝少妇一区二区| 久久久久久中文| 日日摸天天爽夜夜欢| ,成人免费啪啪视频| 午夜欧美女人操逼| 亚洲欧洲小说图片视频| 久草热制服丝袜在线观看| 欧美淫乱视频| 国产无码久久高清| 亚洲制服欧美另类内射| 熟女性视频| 天天澡天天爽日日av| 天堂亚洲精品| 免费观看性欧美一级| 亚洲成?V人片在线观看福利| 夜夜操夜夜爽夜夜高潮| 日本 情色 1区2区3区| 亚洲97在线观看| 十八禁成人网站在线观看| 色婷婷五月天| 欧美大战久久久伊人| 日韩有码中文字幕女同性恋| 艹精品| 天天色综合图片| 青青草久草AV| 97超碰磁| 男人的天堂2019AV| 中国熟女91| 一级片视频啪啪| 五月丁香色色网| 欧美91网站| dy888午夜老子影视达达兔| 人妻精品一区二区在线| 91最新综合| 嗯嗯不要视频| 无码视频黄色网战| 日韩三级在线观看mp4| 99re超碰| 9色在线| 久久久性少妇| 午夜福利精品| 九九热五区| 日韩欧美加勒比| 久久9视频| 久久久久人| 天天躁日日躁xxxxx| 日韩AV中文字幕电影| 欧美不在线| 99色在线观看| 麻豆色99999| 青青久久手机线视频| 青青草在线视频欧美| 啪啪综合网| 999久久久精品国产| 久久久免费高清中文视频| 国产网站在线播放| 嗯嗯嗯啊啊啊干死我吧| 天天插夜夜操| 99色日| 女同女同恋久久级三级| 国产AV天美| 国产精品99精品视频网站| 麻豆国产av网| 波多野结衣AV无码一区| 伊人国产av| 亚洲性爱成人| 欧美另类自拍 | 成人福利视频网| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 怡春苑东京热| 国产亚洲女v在线观看| 欧美后入视频| 999亚洲国产视频| 九一综合网| 日韩一级特黄av毛片| 青操影院| 97精品综合久久| 亚洲人综合19| 色妹子A V| 三级日本一区二区三区| 夜夜狠狠躁日日躁色视频| 欧美1区二区三区公司| 欧美97视频| 国产树林里野战在线看| 性高潮久久久| 五月综合视频| 插入逼91| 日本淫穴在线| 国产尤物AV尤物在线观看不卡| 人妻美腿丝袜日韩| 婷婷久久五月天| 久久精品国产Aⅴ| 97超级欧美| 一区二区三区视频在线观看免费| 这里只有97精品| 日韩伦理久 久久 清纯| 夜夜操青青草| 怡红院久久老司机| 久久久99久9| 欧美一区二区三区另类精品| 欧美色图99| 色妺妺在线视频| 人人操人人插人人摸人人干| 精品女同一区二区三区| 国产精品熟女AV中文字幕在线播放| 天天插夜夜操| 色综合大香蕉| 啊啊啊97视频| 色综合色综合网| 男女猛烈无遮掩视频免费软件| 99re在线视频国产| 久久久久久亚洲精品不卡人乳| 国产精品日韩在线一区| 国产国产亚洲一二三久久| 人人摸人人干| 91Chinese在线| 岛国在线免费视频| 99re久久| 日本天天干天天日一区| 国产丝袜美女诱惑| 一个人免费HD91视频| 色哟哟 日韩精品| 免费视频观看60秒| 啊啊啊不要好爽日韩无码一区| 色色婷婷丁香| 自拍偷拍 高清无码| 亚洲激情视频| 欧美啪啪天堂| 大香蕉啪啪啪啪在线| 91蜜臀熟女| 激情五月天丁香社区| 欧美不卡在线一区二区| 精品人妻一区二区三区不卡断 | 欧美综合自拍| 97精品人妻一二三四| 啊啊啊啊操死我了| 艳美熟妇先锋一二三区| 91性高潮久久久久久久久| 亚洲精品一二区| 永久免费观看的毛片的网站| 欧美日韩小说| 超碰这里有精品| 吉川爱美亚洲二区在线| 91在线免费观看处女| 玖玖色综合| 亚洲黄网在哪免费看| 久久久久人妻二区精品叶可怜| av网站免费看| 亚洲男人天堂AV| 日韩日韩日韩-国产乱码精品一区二区| 中文幕97| 欧美韩国你懂得在线 | 日韩高清黄片| 亚洲av综合伊人久久| 七月丁香婷婷| 亚洲超碰97| 好爽视频在线观看视频| 欧美情色亚洲| 欧成人在线| 日本一二三免费久久| 亚洲骚男同com| 啊啊啊啊啊啊啊在线| 99热这里只有是精品10| 东京热av男人的天堂| 青青久操| 欧美日动态视频| 性性久久| 日韩一级二级三级免费看完整版国语版| 久久一二三四不卡| 蜜臀久久在线视频| 天堂伊人久久| 亚洲精品不卡一二三区| 色香伊人| 丰满欧美放荡少妇在线| 超碰97人人乐| 97在线/亚洲| 大香蕉伊人75| 91老女人| 国产美女口爆吞精视频| 18禁免费视频| 欧美大片一区二区三区| 日日日色色色色色| 天天干夜夜操一区二区| 国产午夜精品一区二区三区牛牛| 啊啊啊啊免费视频| 日韩三级伊人| 少妇厨房愉情理伦片bd在线观看| 欧美激情性久久久久久| 久久久久亚洲?V片无码V| 综合欧美日韩在线观看| 亚洲免费看片| 九九九久千久久激情蜜桃在线看 | 亚洲成人色情五月天丁香花| 免费亚洲国产精品久久一区| www.人人摸在线视频| 亚洲日韩国产精品| 久久精品久久九九精品| 激情久久av一区av二区av| 一区二区 韩日AV| 亚洲91网。| 天天综合站| 亚洲综合97| 久久久久久亚洲中文| 一块操欧美性爱| 超碰国产情侣自拍网| 亚州色图片在线色| 91色宗合| 思思热久久成人| 色五月av| 九九九九欧美| 女优大全 - 91n| 亚洲国产精品99久久久| 静品嫩模一区二区| 欧美熟妇精品黑人巨大一二三区| 99re在线精品78| 欧美综合网在线| 日本精品无码三级网站| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | japan日本高清乱xxxx| 91久久久久免| 天综合网欧美| 国产一级内射高清视频| 日本五十路熟女一区二区| 91爱综合| 精品丰满熟妇人妻一区| 成人无码在线视频网站| 五月丁香婷婷色| 新视频sss国产| 国产精品96| 激情五月天社区| 久草色悠悠在线视频| 啊啊啊骚| 国产精品一二三在线看| 不卡九肏| 伊人骚琪琪亚洲天堂网站| 亚洲日韩美女中文字幕乱| 青青草原人妻| 日韩BBN| 国产精品极品美女视频| 啊啊啊好湿国产一二| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 3PAV乱伦视频| 九九Av| 日韩青久久| 日韩美女操b| 操B久久| 午夜舔阴达高潮视频免费看| 亚洲久热| 九九九九精品在线| 日韩精品 视频一区二区| 亚州色站 日韩电影| 欧美超碰97| 人人人人人人少妇| 精品熟妇视频一区二区| 日韩一区二区三区四区五区| 色娱乐色呦呦夜夜夜夜av| 日韩免费中文字幕视频| 日韩在线视频1234| 欧综合网| 日本三级韩三级99久久| 亚洲中文字幕av | 天天综合网~91入口| 少妇啪啪自拍| 亚州综合AⅤ| 欧美日韩大黄片| 极品少妇99| 久久久久久久九九九九九九| 97硬碰| 国产不良强奸视频免费看| 色婷婷成人综合| 人妻无一区二区三区| 校园春色综合色| av一区二区三区四区| 亚洲色性情三级| 91在线超高颜值国产| 亚洲熟女乱综合一区二区三区| 日韩精品在线观看观看| 欧美久久人妻少妇一区二区| 欧美性爱日韩性爱| 美女网站黄页| 无码伊人久久大杳蕉中文无码| 极品少妇久久久久| 天天日少妇逼AV| 久久精品| 1区2区3区中文字幕日韩| av天堂天堂av日韩| 五月天欧美色图| 欧美在线播放aaaa| 成人小电影网站tex| 人妻天天操天天爽视频免费| J?P?NESEHD熟女熟妇伦| 9久久美女首页| 国产极品一区二区三区三州| 亚洲色图8| 国产亚洲 中文欧美久久| 欧美性爱精品七区| 日本孕妇孕交| www.99在线| 亚洲无线观看久久| 色婷婷久久综合超碰| 欧美精品1区2区3区| 啊啊啊啊网站| 怡红院成人av| 女人高潮抽搐喷水视频网站| 97操| 日产123区精品免费观看| 99热只有| 久久性爱精品一区| 91操熟女视频 | 九九热久久99精品re| 熟女一区二区三区四区| 亚洲一区二区三区久久 亚洲一区二区| 日本人妻伦在线中文字幕| 日韩人人精品| 97 亚洲 日韩 欧美 在线| 综合在线导航一区| 亚州性色| 亚洲国内精品成人不卡| 亚洲中文字幕噜噜噜久久久| 国产成人无码a| 日本媚薬中文字幕在线| 98精品国产乱码久久久久久| 婷婷色综合| 人人操人人搞人人草| 久久久久久久9| 97干综合网| 丰满少妇人妻久久久久久| 亚洲精品无码少妇久久| 久久双插| 五月情色天| 吊色| 99九九久久| 91一区二区| 无码聚合| 国产精品探花色| 熟妇视频一区二区三区在线| 日韩综合97P| 天天亚洲综合| 色五月婷婷在线| 免费看A片毛毛片在线播| 男啪女色黄无遮挡免费观看| 又黄又硬又粗又长国产视频| 中文字幕超碰CAO| 天天干天天日天天射黄色大片| 综合色啪| 91成人在线免费视频| 综合国产影视三级| 人妻夜夜爽天天爽三区麻豆AV网站| 欧美色图在线视频少妇| 日韩99神马视频播放| 天美传媒国产原创中文字幕亚洲欧美另类| 国产女人操逼视频| 大香蕉www.超碰| 日韩免费簧片| 亚洲人成在线放东京热| 日韩九九九| 亚洲情色 自拍| 亚洲交换| 福利大香蕉| 走光一区92下载| 亚州春色| 亚洲色91C| 天天看片麻豆| 妇人噜噜| 亚洲诱惑| 一区二区国产视频在线观看| 少妇人妻精品| 四虎AV影视国产精品亚洲精品| 久久9亚洲| 精品射1999| 欧美日韩人人精品| 欧美激情亚洲色图| 中文字幕视频一区视频二区| 色婷婷aV一区二区三区麻豆综合| 欧美亚洲玖玖玖| 久久天天摸| 97青青操视频| 亚洲男人的天堂一区二区| 久久久久久久久久久久久久9999| 国产原创精品| 玖玖爱综合| 欧美久久婷婷| 日韩精品电影| 日本精品一区二区三| 成人开心网在线视频| 青青草原av| 东京热男人天堂| 欧美色女人| 久久久国产av美女私房| 成人乱人伦一区二区| AV污污污污| 久热9|