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

ARTICLE DETAIL

資訊詳情

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

企業(yè)微信臨時(shí)素材上傳:從踩坑到優(yōu)雅實(shí)現(xiàn)

企業(yè)微信臨時(shí)素材上傳:從踩坑到優(yōu)雅實(shí)現(xiàn) 1. 臨時(shí)素材上傳到底難在哪企業(yè)微信的臨時(shí)素材上傳看起來(lái)只是調(diào)一個(gè)接口的事但真到業(yè)務(wù)里跑起來(lái)坑比想象中多。我前后在三個(gè)項(xiàng)目里踩過(guò)這個(gè)環(huán)節(jié)從最開始用最樸素的方式硬懟到后來(lái)逐步抽象出一套相對(duì)優(yōu)雅的方案中間交了不少學(xué)費(fèi)。這篇文章就把這些經(jīng)驗(yàn)完整拆開講一遍適合正在對(duì)接企業(yè)微信素材能力、或者已經(jīng)對(duì)接但被各種邊界情況折騰過(guò)的開發(fā)者參考。先把概念理清楚。企業(yè)微信的臨時(shí)素材指的是上傳后只在服務(wù)端保留三天的媒體文件包括圖片、語(yǔ)音、視頻和普通文件。它和永久素材最大的區(qū)別就是生命周期短但勝在上傳接口簡(jiǎn)單、不需要額外的素材管理邏輯。典型使用場(chǎng)景是客服系統(tǒng)里發(fā)送一張工單截圖、審批流里附帶一個(gè)PDF附件、機(jī)器人推送一段語(yǔ)音通知。這些場(chǎng)景的共同特點(diǎn)是文件用完即棄不需要長(zhǎng)期存儲(chǔ)臨時(shí)素材剛好匹配。那難點(diǎn)在哪我總結(jié)下來(lái)主要是四塊第一上傳接口用的是multipart/form-data和普通JSON請(qǐng)求的封裝方式完全不同很多HTTP工具類默認(rèn)不支持或者支持得別扭第二media_id這個(gè)返回值有有效期業(yè)務(wù)側(cè)如果緩存了它過(guò)期后發(fā)送會(huì)直接失敗第三文件類型和大小有硬性限制圖片不能超過(guò)10MB、語(yǔ)音不能超過(guò)2MB且只支持AMR和MP3、視頻不能超過(guò)10MB超了接口直接報(bào)錯(cuò)第四并發(fā)上傳時(shí)如果多個(gè)請(qǐng)求同時(shí)拿同一個(gè)文件流會(huì)出現(xiàn)流被消費(fèi)完導(dǎo)致后續(xù)請(qǐng)求拿到空內(nèi)容的問(wèn)題。這四點(diǎn)里前兩點(diǎn)是認(rèn)知問(wèn)題后兩點(diǎn)是實(shí)打?qū)嵉募夹g(shù)坑。我見過(guò)不少項(xiàng)目在這塊的處理方式是寫一個(gè)工具方法每次要發(fā)文件就現(xiàn)讀現(xiàn)傳傳完拿到media_id立刻用掉。這種方式在低頻場(chǎng)景下沒(méi)問(wèn)題但一旦量上來(lái)比如一天幾千次上傳就會(huì)暴露出重復(fù)上傳、流管理混亂、錯(cuò)誤處理缺失等一系列問(wèn)題。所以“優(yōu)雅”這個(gè)詞在這里不是錦上添花而是有明確的工程價(jià)值——它意味著可復(fù)用、可觀測(cè)、可容錯(cuò)。下面我會(huì)從整體設(shè)計(jì)思路開始一步步拆到具體實(shí)現(xiàn)把每個(gè)決策背后的理由講清楚。你如果只是想快速抄個(gè)能跑的代碼可以直接跳到第三節(jié)但如果你想搞清楚為什么這么設(shè)計(jì)建議從頭看。2. 整體方案設(shè)計(jì)與選型考量2.1 為什么不用現(xiàn)成的SDK企業(yè)微信官方提供了多語(yǔ)言SDKJava、Python、PHP都有。我最初也想過(guò)直接用SDK省事但實(shí)際用下來(lái)發(fā)現(xiàn)兩個(gè)問(wèn)題。一是SDK往往把a(bǔ)ccess_token的管理和素材上傳耦合在一起而access_token本身需要全局緩存和刷新如果每個(gè)上傳請(qǐng)求都去觸發(fā)一次token獲取在高并發(fā)下會(huì)頻繁打企業(yè)微信的接口觸發(fā)頻率限制。二是SDK的封裝層次比較深出問(wèn)題的時(shí)候排查鏈路長(zhǎng)比如上傳失敗你很難快速判斷是token問(wèn)題、網(wǎng)絡(luò)問(wèn)題還是文件本身的問(wèn)題。所以我的選擇是access_token自己管上傳邏輯自己寫只依賴一個(gè)通用的HTTP客戶端。這樣每一層都是透明的出問(wèn)題能快速定位。當(dāng)然這不是說(shuō)SDK不好如果你的項(xiàng)目規(guī)模小、上傳頻率低用SDK完全沒(méi)問(wèn)題。但如果你追求可控性和可觀測(cè)性自己封裝是更穩(wěn)的路。2.2 核心設(shè)計(jì)原則整個(gè)方案我定了三條原則。第一條是流的一次性消費(fèi)文件流從磁盤或網(wǎng)絡(luò)讀進(jìn)來(lái)之后只允許被消費(fèi)一次避免重復(fù)讀取導(dǎo)致的性能損耗和狀態(tài)混亂。第二條是media_id不跨請(qǐng)求緩存每次上傳拿到media_id后立即返回給調(diào)用方由調(diào)用方在本次業(yè)務(wù)邏輯內(nèi)用完即棄不做全局緩存。第三條是錯(cuò)誤分層把網(wǎng)絡(luò)錯(cuò)誤、接口錯(cuò)誤、文件校驗(yàn)錯(cuò)誤分開處理每類錯(cuò)誤有不同的重試策略和日志級(jí)別。這三條原則看起來(lái)簡(jiǎn)單但落地的時(shí)候需要一些設(shè)計(jì)上的取舍。比如第一條如果調(diào)用方傳進(jìn)來(lái)的是一個(gè)InputStream那上傳完之后這個(gè)流就關(guān)了調(diào)用方不能再讀。所以我在接口設(shè)計(jì)上要求調(diào)用方傳文件路徑或者字節(jié)數(shù)組而不是流。字節(jié)數(shù)組適合小文件文件路徑適合大文件這樣內(nèi)部可以自己控制流的生命周期。2.3 模塊劃分整個(gè)上傳能力我拆成了四個(gè)模塊。TokenManager負(fù)責(zé)access_token的獲取、緩存和刷新用雙檢鎖加過(guò)期時(shí)間控制保證多線程下只有一個(gè)線程去刷新。MediaValidator負(fù)責(zé)文件校驗(yàn)包括類型、大小、擴(kuò)展名校驗(yàn)不通過(guò)直接拋業(yè)務(wù)異常不走網(wǎng)絡(luò)請(qǐng)求。MediaUploader是核心上傳邏輯負(fù)責(zé)組裝multipart請(qǐng)求、發(fā)送、解析響應(yīng)。UploadResult是統(tǒng)一的返回結(jié)構(gòu)包含media_id、類型、創(chuàng)建時(shí)間以及一個(gè)isSuccess的標(biāo)志。這四個(gè)模塊之間是單向依賴Uploader依賴Validator和TokenManagerValidator和TokenManager互不依賴。這樣的好處是每個(gè)模塊可以單獨(dú)測(cè)試比如Validator的測(cè)試不需要mock網(wǎng)絡(luò)TokenManager的測(cè)試不需要真實(shí)文件。2.4 關(guān)于multipart的選型multipart/form-data的組裝我試過(guò)三種方式。第一種是手寫boundary拼接字節(jié)流靈活但容易出錯(cuò)尤其是boundary和內(nèi)容里出現(xiàn)沖突的時(shí)候。第二種是用Apache HttpClient的MultipartEntityBuilder封裝好、穩(wěn)定但引入了一個(gè)比較重的依賴。第三種是用OkHttp的MultipartBody輕量、API清晰我最終選了這個(gè)。選OkHttp的理由是它的MultipartBody.Builder用起來(lái)很直觀addFormDataPart可以同時(shí)指定name、filename和RequestBody而且RequestBody可以基于文件或字節(jié)數(shù)組創(chuàng)建天然支持流式上傳。另外OkHttp的連接池和超時(shí)控制也比較成熟不需要自己再造輪子。如果你用的是Java生態(tài)里的其他HTTP客戶端思路是一樣的關(guān)鍵是找到支持流式multipart的API。3. 核心細(xì)節(jié)與實(shí)操要點(diǎn)拆解3.1 access_token的管理策略access_token是企業(yè)微信所有接口的通行證有效期7200秒也就是兩小時(shí)。它的獲取接口有頻率限制而且新獲取的token會(huì)讓舊的失效。這意味著你不能每個(gè)請(qǐng)求都去獲取也不能緩存太久導(dǎo)致過(guò)期。我的做法是用一個(gè)帶過(guò)期時(shí)間的緩存key是應(yīng)用的corpId和secret的組合value是token和過(guò)期時(shí)間戳。獲取token的時(shí)候先查緩存如果存在且距離過(guò)期還有300秒以上直接用否則加鎖去刷新。加鎖用雙檢鎖避免多個(gè)線程同時(shí)刷新。刷新成功后更新緩存失敗則拋異常讓上層決定是否重試。這里有個(gè)細(xì)節(jié)過(guò)期時(shí)間不要設(shè)成7200秒整要留出網(wǎng)絡(luò)延遲和時(shí)鐘偏差的余量。我一般設(shè)成6900秒也就是提前300秒過(guò)期。另外如果企業(yè)微信返回的token過(guò)期時(shí)間字段和預(yù)期不一致以返回的為準(zhǔn)不要硬編碼。注意access_token的緩存不要用本地Map簡(jiǎn)單存多實(shí)例部署的時(shí)候每個(gè)實(shí)例都會(huì)各自刷新導(dǎo)致token頻繁失效。生產(chǎn)環(huán)境建議用Redis之類的集中式緩存或者至少保證同一時(shí)間只有一個(gè)實(shí)例在刷新。3.2 文件校驗(yàn)的邊界條件文件校驗(yàn)看起來(lái)簡(jiǎn)單但邊界條件不少。企業(yè)微信對(duì)臨時(shí)素材的限制是這樣的圖片支持JPG、PNG、GIF、BMP、JPEG大小不超過(guò)10MB語(yǔ)音支持AMR、MP3大小不超過(guò)2MB播放長(zhǎng)度不超過(guò)60秒視頻支持MP4大小不超過(guò)10MB普通文件大小不超過(guò)20MB。校驗(yàn)的時(shí)候要注意幾點(diǎn)。第一擴(kuò)展名和實(shí)際內(nèi)容可能不一致比如一個(gè)exe文件改名為jpg光看擴(kuò)展名是攔不住的。如果業(yè)務(wù)安全要求高需要讀文件頭做魔數(shù)校驗(yàn)。第二大小校驗(yàn)要在讀取文件之前做用File.length()獲取避免把大文件讀進(jìn)內(nèi)存才發(fā)現(xiàn)超限。第三語(yǔ)音的時(shí)長(zhǎng)校驗(yàn)比較麻煩需要解析音頻文件頭如果業(yè)務(wù)不強(qiáng)制可以只校驗(yàn)大小和格式時(shí)長(zhǎng)交給企業(yè)微信接口去判斷。我一般把校驗(yàn)規(guī)則做成配置用枚舉定義每種類型的允許擴(kuò)展名和大小上限這樣新增類型的時(shí)候只改配置不改代碼。校驗(yàn)失敗的時(shí)候拋出帶明確錯(cuò)誤碼的異常比如FILE_TOO_LARGE、UNSUPPORTED_TYPE方便上層做不同的提示。3.3 multipart請(qǐng)求的組裝細(xì)節(jié)組裝multipart請(qǐng)求的時(shí)候有幾個(gè)細(xì)節(jié)容易忽略。第一boundary的生成要用隨機(jī)字符串不要用固定值避免和文件內(nèi)容沖突。OkHttp會(huì)自動(dòng)生成不用自己管。第二Content-Type要設(shè)成multipart/form-data并且?guī)蟗oundary參數(shù)這個(gè)OkHttp的MultipartBody會(huì)自動(dòng)處理。第三每個(gè)part的name要和接口文檔一致企業(yè)微信上傳接口的字段名是media類型是filefilename要帶上原始文件名和擴(kuò)展名。代碼大概長(zhǎng)這樣RequestBody fileBody RequestBody.create(file, MediaType.parse(application/octet-stream)); MultipartBody body new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart(media, file.getName(), fileBody) .build(); Request request new Request.Builder() .url(uploadUrl ?access_token token type type) .post(body) .build();這里type參數(shù)是素材類型取值是image、voice、video、file。注意type要放在URL的query參數(shù)里不是放在body里這是企業(yè)微信接口的設(shè)計(jì)。3.4 響應(yīng)解析與錯(cuò)誤處理企業(yè)微信上傳接口的響應(yīng)是JSON成功的時(shí)候返回media_id、type、created_at。失敗的時(shí)候返回errcode和errmsg。解析的時(shí)候要先判斷HTTP狀態(tài)碼再判斷errcode。有些錯(cuò)誤是HTTP 200但errcode非0比如40001表示token無(wú)效40004表示媒體文件類型不合法40005表示文件大小超限。我的處理方式是HTTP非200直接拋網(wǎng)絡(luò)異常HTTP 200但errcode非0則根據(jù)errcode映射成業(yè)務(wù)異常。40001這種token失效的錯(cuò)誤觸發(fā)一次token刷新后重試一次其他錯(cuò)誤直接拋給上層不重試。重試只做一次避免無(wú)限循環(huán)。提示errcode的映射表建議做成常量類不要散落在代碼里。企業(yè)微信的錯(cuò)誤碼有幾百個(gè)常用的就那幾十個(gè)維護(hù)一份自己的映射表比每次查文檔快得多。3.5 并發(fā)場(chǎng)景下的流管理并發(fā)上傳同一個(gè)文件的時(shí)候如果多個(gè)線程共享一個(gè)InputStream會(huì)出現(xiàn)流被消費(fèi)完的問(wèn)題。我的做法是接口只接受File或byte[]不接受InputStream。如果是File每個(gè)線程自己打開一個(gè)新的FileInputStream如果是byte[]每個(gè)線程自己創(chuàng)建一個(gè)新的ByteArrayInputStream。這樣每個(gè)上傳請(qǐng)求都有獨(dú)立的流互不干擾。如果是大文件用File的方式更省內(nèi)存因?yàn)镺kHttp會(huì)流式讀取文件不會(huì)一次性加載到內(nèi)存。如果是小文件用byte[]更方便因?yàn)榭梢詮?fù)用不需要反復(fù)讀磁盤。我一般設(shè)一個(gè)閾值比如1MB以下的用byte[]以上的用File。4. 完整實(shí)操流程與關(guān)鍵環(huán)節(jié)4.1 環(huán)境準(zhǔn)備與依賴引入先說(shuō)一下環(huán)境。我用的是Java 8加OkHttp 4.x構(gòu)建工具是Maven。依賴只需要兩個(gè)OkHttp和Jackson前者做HTTP請(qǐng)求后者解析JSON。如果你用的是Gradle換成對(duì)應(yīng)的坐標(biāo)就行。dependency groupIdcom.squareup.okhttp3/groupId artifactIdokhttp/artifactId version4.9.3/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.13.0/version /dependencyOkHttp 4.x需要Kotlin標(biāo)準(zhǔn)庫(kù)Maven會(huì)自動(dòng)帶上不用手動(dòng)加。如果你用的是Java 11以上也可以考慮用Java自帶的HttpClient但multipart的支持不如OkHttp方便需要自己拼boundary。4.2 TokenManager的實(shí)現(xiàn)TokenManager的核心是一個(gè)帶過(guò)期時(shí)間的緩存和一個(gè)刷新鎖。我用ConcurrentHashMap存tokenkey是corpId加secretvalue是一個(gè)包含token和過(guò)期時(shí)間的對(duì)象。獲取token的方法先查緩存判斷是否過(guò)期過(guò)期則加鎖刷新。public String getToken(String corpId, String secret) { String key corpId : secret; TokenCache cache tokenMap.get(key); if (cache ! null !cache.isExpired()) { return cache.getToken(); } synchronized (this) { cache tokenMap.get(key); if (cache ! null !cache.isExpired()) { return cache.getToken(); } String token fetchTokenFromApi(corpId, secret); tokenMap.put(key, new TokenCache(token, System.currentTimeMillis() 6900 * 1000)); return token; } }fetchTokenFromApi就是調(diào)企業(yè)微信的gettoken接口解析返回的access_token和expires_in。注意expires_in是秒要轉(zhuǎn)成毫秒。如果接口返回errcode非0拋異常。注意synchronized鎖的是this如果TokenManager是單例沒(méi)問(wèn)題如果是多例鎖不住。生產(chǎn)環(huán)境建議用分布式鎖或者保證TokenManager是單例。4.3 MediaValidator的實(shí)現(xiàn)Validator的職責(zé)是校驗(yàn)文件是否符合企業(yè)微信的要求。我用一個(gè)枚舉定義每種類型的規(guī)則public enum MediaType { IMAGE(image, Arrays.asList(jpg, jpeg, png, gif, bmp), 10 * 1024 * 1024), VOICE(voice, Arrays.asList(amr, mp3), 2 * 1024 * 1024), VIDEO(video, Arrays.asList(mp4), 10 * 1024 * 1024), FILE(file, Collections.emptyList(), 20 * 1024 * 1024); private final String type; private final ListString allowedExtensions; private final long maxSize; // 構(gòu)造方法和getter省略 }校驗(yàn)方法接收File和MediaType先判斷文件是否存在再判斷大小再判斷擴(kuò)展名。FILE類型不限制擴(kuò)展名只限制大小。校驗(yàn)不通過(guò)拋MediaValidationException帶上錯(cuò)誤碼。4.4 MediaUploader的核心邏輯Uploader是核心流程是校驗(yàn)文件、獲取token、組裝multipart、發(fā)送請(qǐng)求、解析響應(yīng)、返回結(jié)果。我把它寫成一個(gè)方法接收File、MediaType、corpId、secret返回UploadResult。public UploadResult upload(File file, MediaType type, String corpId, String secret) { validator.validate(file, type); String token tokenManager.getToken(corpId, secret); String url UPLOAD_URL ?access_token token type type.getType(); RequestBody fileBody RequestBody.create(file, MediaType.parse(application/octet-stream)); MultipartBody body new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart(media, file.getName(), fileBody) .build(); Request request new Request.Builder().url(url).post(body).build(); try (Response response client.newCall(request).execute()) { String responseBody response.body().string(); return parseResponse(responseBody, type); } catch (IOException e) { throw new MediaUploadException(NETWORK_ERROR, e); } }parseResponse解析JSON如果errcode是0返回成功的UploadResult如果是40001刷新token后重試一次其他錯(cuò)誤拋異常。4.5 重試機(jī)制的實(shí)現(xiàn)重試只針對(duì)token失效和網(wǎng)絡(luò)超時(shí)兩種情況。token失效的重試邏輯是捕獲到40001錯(cuò)誤后強(qiáng)制刷新token重新組裝請(qǐng)求再發(fā)一次。網(wǎng)絡(luò)超時(shí)的重試是捕獲IOException后判斷是否是超時(shí)是則重試一次不是則直接拋。重試次數(shù)我設(shè)成1次也就是最多發(fā)兩次請(qǐng)求。為什么不設(shè)更多因?yàn)槠髽I(yè)微信的接口本身有頻率限制重試太多會(huì)觸發(fā)限流反而更慢。而且如果是文件本身的問(wèn)題重試多少次都沒(méi)用。private UploadResult uploadWithRetry(File file, MediaType type, String corpId, String secret, int retryCount) { try { return doUpload(file, type, corpId, secret); } catch (TokenExpiredException e) { if (retryCount 0) { tokenManager.refresh(corpId, secret); return uploadWithRetry(file, type, corpId, secret, retryCount - 1); } throw e; } catch (IOException e) { if (retryCount 0 isTimeout(e)) { return uploadWithRetry(file, type, corpId, secret, retryCount - 1); } throw new MediaUploadException(NETWORK_ERROR, e); } }4.6 調(diào)用示例與結(jié)果處理調(diào)用的時(shí)候業(yè)務(wù)代碼只需要三行MediaUploader uploader new MediaUploader(); UploadResult result uploader.upload(new File(/path/to/image.jpg), MediaType.IMAGE, corpId, secret); String mediaId result.getMediaId();拿到mediaId后立即在本次業(yè)務(wù)邏輯里用掉比如調(diào)發(fā)送消息接口。不要存到數(shù)據(jù)庫(kù)或者緩存里因?yàn)槿旌缶褪Я?。如果業(yè)務(wù)需要長(zhǎng)期保存應(yīng)該把文件存到自己的對(duì)象存儲(chǔ)需要發(fā)送的時(shí)候再上傳一次。提示media_id的有效期是三天但實(shí)際使用中建議按兩天半來(lái)規(guī)劃留出余量。如果業(yè)務(wù)邏輯比較復(fù)雜從上傳到發(fā)送之間可能間隔很久那就要考慮重新上傳。5. 常見問(wèn)題與排查技巧實(shí)錄5.1 上傳失敗排查速查表錯(cuò)誤現(xiàn)象可能原因排查方法解決方案返回40001token無(wú)效或過(guò)期檢查token緩存是否過(guò)期是否被其他實(shí)例刷新覆蓋刷新token后重試檢查緩存策略返回40004文件類型不合法檢查擴(kuò)展名和實(shí)際類型是否匹配修正文件類型或做魔數(shù)校驗(yàn)返回40005文件大小超限檢查文件實(shí)際大小壓縮文件或分片上傳返回41001缺少access_token參數(shù)檢查URL拼接確認(rèn)token不為空連接超時(shí)網(wǎng)絡(luò)問(wèn)題或企業(yè)微信側(cè)限流檢查網(wǎng)絡(luò)連通性查看是否觸發(fā)頻率限制增加超時(shí)時(shí)間降低并發(fā)流被關(guān)閉多線程共享InputStream檢查是否傳入了共享流改用File或byte[]中文文件名亂碼編碼問(wèn)題檢查filename的編碼用URLEncoder編碼文件名5.2 我踩過(guò)的三個(gè)坑第一個(gè)坑是token緩存用了本地Map結(jié)果多實(shí)例部署的時(shí)候A實(shí)例刷新了tokenB實(shí)例還在用舊的導(dǎo)致間歇性40001。后來(lái)改成Redis集中緩存問(wèn)題解決。這個(gè)坑的教訓(xùn)是任何有狀態(tài)的東西在多實(shí)例環(huán)境下都要考慮一致性問(wèn)題。第二個(gè)坑是文件校驗(yàn)只看了擴(kuò)展名結(jié)果有個(gè)用戶上傳了一個(gè)改名為jpg的文本文件企業(yè)微信返回40004。后來(lái)加了魔數(shù)校驗(yàn)讀文件前幾個(gè)字節(jié)判斷真實(shí)類型。魔數(shù)校驗(yàn)的規(guī)則是JPG開頭是FFD8PNG開頭是89504E47GIF開頭是47494638。讀前8個(gè)字節(jié)就夠了。第三個(gè)坑是并發(fā)上傳同一個(gè)文件時(shí)多個(gè)線程共享了一個(gè)FileInputStream導(dǎo)致部分請(qǐng)求拿到空內(nèi)容。后來(lái)改成每個(gè)請(qǐng)求自己打開流問(wèn)題解決。這個(gè)坑的教訓(xùn)是流是有狀態(tài)的不能跨線程共享。5.3 性能優(yōu)化的幾個(gè)點(diǎn)如果上傳頻率很高有幾個(gè)優(yōu)化點(diǎn)可以考慮。第一用連接池OkHttp默認(rèn)有連接池復(fù)用TCP連接減少握手開銷。第二大文件用流式上傳不要讀進(jìn)內(nèi)存OkHttp的RequestBody.create(File)就是流式的。第三token緩存用集中式緩存避免每個(gè)實(shí)例都去刷新。第四批量上傳的時(shí)候用異步OkHttp的enqueue方法可以并發(fā)發(fā)送但要注意控制并發(fā)數(shù)避免觸發(fā)限流。我實(shí)測(cè)下來(lái)單實(shí)例每秒上傳10個(gè)1MB的文件CPU和內(nèi)存都很平穩(wěn)。如果超過(guò)這個(gè)量建議做隊(duì)列削峰把上傳請(qǐng)求放到隊(duì)列里慢慢消費(fèi)。5.4 日志與監(jiān)控上傳這種外部依賴的操作日志一定要打全。我一般記錄這幾個(gè)字段請(qǐng)求ID、文件大小、文件類型、耗時(shí)、結(jié)果碼。請(qǐng)求ID用于串聯(lián)上下游日志文件大小和類型用于分析失敗分布耗時(shí)用于發(fā)現(xiàn)性能問(wèn)題結(jié)果碼用于統(tǒng)計(jì)成功率。監(jiān)控方面我會(huì)統(tǒng)計(jì)上傳成功率、平均耗時(shí)、失敗原因分布。成功率低于99%就告警平均耗時(shí)超過(guò)2秒也告警。失敗原因分布能幫你快速定位是token問(wèn)題還是文件問(wèn)題。注意日志里不要打media_id的完整值打前幾位就行避免泄露。也不要打access_token這個(gè)是敏感信息。5.5 關(guān)于素材類型的幾個(gè)疑問(wèn)有人問(wèn)過(guò)圖片能不能當(dāng)文件上傳可以type傳file就行但這樣企業(yè)微信不會(huì)做圖片處理發(fā)送的時(shí)候也是當(dāng)文件發(fā)。反過(guò)來(lái)文件能不能當(dāng)圖片上傳不行企業(yè)微信會(huì)校驗(yàn)實(shí)際類型不匹配會(huì)返回40004。還有人問(wèn)視頻的封面怎么處理企業(yè)微信上傳視頻接口支持傳封面但臨時(shí)素材接口不支持只有永久素材接口才支持。如果業(yè)務(wù)需要封面要么用永久素材要么自己在發(fā)送的時(shí)候處理。語(yǔ)音的時(shí)長(zhǎng)限制是60秒這個(gè)是在上傳的時(shí)候校驗(yàn)的超過(guò)會(huì)返回錯(cuò)誤。如果你不確定音頻時(shí)長(zhǎng)可以用FFmpeg之類的工具先探測(cè)一下或者干脆只校驗(yàn)大小讓企業(yè)微信去判斷。6. 一些個(gè)人體會(huì)這套方案我在兩個(gè)項(xiàng)目里用過(guò)整體穩(wěn)定性不錯(cuò)。最大的感受是對(duì)接外部接口優(yōu)雅的關(guān)鍵不在于代碼寫得多漂亮而在于對(duì)邊界情況的覆蓋。token過(guò)期、文件超限、網(wǎng)絡(luò)抖動(dòng)、并發(fā)沖突這些才是真正消耗精力的地方。把這些問(wèn)題處理好了代碼自然就優(yōu)雅了。另外一點(diǎn)是不要過(guò)度設(shè)計(jì)。我見過(guò)有的項(xiàng)目為了上傳一個(gè)文件搞了一套復(fù)雜的責(zé)任鏈加策略模式結(jié)果維護(hù)成本比收益還高。我的建議是先跑通再抽象。等你在三個(gè)地方寫了重復(fù)的上傳邏輯再考慮抽成公共模塊。過(guò)早抽象比不抽象更可怕。最后分享一個(gè)小技巧如果你不確定企業(yè)微信的接口行為可以用curl先手動(dòng)調(diào)一次把請(qǐng)求和響應(yīng)都打出來(lái)看。比在代碼里調(diào)試快得多。比如上傳接口你可以這樣調(diào)curl -X POST https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_tokenYOUR_TOKENtypeimage \ -F media/path/to/image.jpg把YOUR_TOKEN換成真實(shí)的token就能看到完整的響應(yīng)。這個(gè)方式在排查40004、40005這類錯(cuò)誤的時(shí)候特別有用因?yàn)槟隳苤苯涌吹狡髽I(yè)微信返回的errmsg比看代碼猜快多了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲国男人的天堂| 屁屁影院一区二区三区国产| 精品免费1| 亞洲久久直播| 亚洲综合欧美| 久久久青青草| 91无码人妻精品一区二区三区蜜桃| 99热自拍| 强奸乱伦资源| 亚洲精品人妻在线| 伊人黄色片| 亲子敌伦对白在线播放| 欧美在线干| 欧美精品丝袜久久久中文字幕| 国产大学生口爆吞精合集| 综合亚洲欧美| 久久9免费视频| 国产青青美女玩逼视频| 99热18这里只有精品| 欧美熟妇人体| 色网亚洲人| 2026国产精品视频| 极品后入免费视频| 日日夜夜噜| 东京热精品97综合网| 午夜男女爽爽爽在线视频| 国内毛片国产欧美拍| 久久久日本电影| 中文字幕av一区二区三区人妻少妇 | 噜噜噜亚洲精品| 亚洲 中文 女同| 黄片在线免费在线观看| 国产精品自在自拍视频| 日逼国产| 色综合婷婷| 中文字幕免费看大片| 国产亚洲精品美女久久久m| 人妻 中文 日韩| 久艾草在线精品视频在线观看| 久久午夜色播影院免费高清| 男人的天堂 在线一区| 神马麻豆福利院| 欧美亚洲清纯| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 色欲久久99国产精品久久久久久| 我想要 啊 啊 啊| 9精品久久久久| 国产搭汕a级片| 亚洲图片 欧美电影| 骚逼自拍99| 婷婷九月丁香| 中国和日本人色哪个不下载能放| 九t超碰| 91制服丝袜| 熟女熟妇一区二区三四区| 99视频自拍区| 91成人18| 福利操逼| 九九无码视频| 国产欧美日产一区二区三区 - 国产欧美日 | 乱色视频中文字幕| 91亚州日韩高清| 白嫩嫩一区| 欧美精品在线观看| 91欧美另类| 免费亚洲国产精品久久一区| 91欧美网| 国产精品国产自产高清AV| 无码WWW免费视频网站| 嗯嗯嗯好爽| 日本人体九九九九九九| 少妇专区一二三四五| 国产精品一二三| 亚洲激情视频| 日本免费专区| 欧美熟女少妇| 综合97久久| 97免费在线观看| 亚洲欧美自拍偷拍| 国内精品不卡无毒99999| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 麻豆久久一区二区三区| 国语精品内射在线观看| 色婷婷综合久久久久中文一区二区 | 熟女91网站| 亚洲中文字幕精品一区| 婷色五月天| 日日干男人的天堂| 丁香色狠狠色综合久久小说| 久久婷五月天| 成人天天爽| 国产成人91一区二区三区| 国产亚洲禁久一区二区| 中文字幕制服欧美久久一区| 999色欧美中文字幕| 日韩成人私密一级精品av| 久久久久国产一区二| 歐美一級亂黃99在綫精品| 超碰欧美97资源| 边做饭边操逼逼| 亚洲1区| 九九综合网| 天天上日日上日韩精品| 97五月天| 久久99九九九九6666免费观看软件| 色就色综合| 日本一区二区电影网站| 97日韩欧美| 久久综合九九| 无码精品啪啪啪一区二区三区三州| 极品国产内射| 亚洲精品天天影视综合网 | 欧美97在线观看| 欧美亚洲首页| 午夜无码熟妇丰满人妻| 999综合网| 射 色综合| 久久久久婷婷精品av电影| 91久久免费视频互動交流| 亚码激情| 无码人妻精品一区二区中文| 91中文精品日韩欧美在线| 啊啊啊啊操死我| 夜夜草网站| 天操天操夜操夜月月年年操操| 91精品微拍福利| 丝袜喷水在线| 国产视频一区二区三区在线免费观看 | 亚洲自拍欧美国产首页网曝| 99久久e免费热视| 欧美猛交黑寡妇中文字幕| 久久精品国产亚洲妲己影视| 97热视频在线观看| 五月天成人综合| 欧美大的香蕉有线电视视频| 性爱动态120秒| 亚洲中文字幕熟女少妇一区二区| 玖玖综合色| 亚洲制服aⅴ中文字幕| 久久熟女久| 日本午夜操逼| 中文字幕熟女人妻丝袜丝| 天天看,天天做| 97ai亚洲| 青青操少妇| 久久91视频| 亚州综合AⅤ| 日韩一区二区高清在线观看的| 蜜臀aV午夜一区二区三区| 国内毛片国产专区二| 亚洲天天自拍| julia中文字幕在线观看| 约操熟妇| 国产精品白领在线观看| 欧美在线第五页| 91综合在线| 成人羞羞视频国产| 亚洲熟妇AV日韩熟妇在线| 日韩久久激情精品| 精品一级毛片在线观看| 久久原创中文| 秋霞福利网| 少妇超碰在线| 午夜无码精品免费看性色| 97色在线视频| 日韩不卡网操逼中文字幕日韩| 九九aV| 人妻一区二区三区四区视频| 熟妇色99| 国产青青综合伊人| 色欲人妻一区二区在线| 密臀成人视频久久久| 99在线精品观看99| 日韩人妻一二三区视频| 国产伦精品| 日本九九久久99| www.久久99| 久久久久久99AV无码免费网站| 欧美网站免费| 国产老太乱伦一区| 亚洲图片欧美制度| 啊啊啊好爽快点啊啊啊嗯嗯| 中文字幕奈奈美被公侵犯| 国产少妇内射| 婷婷香网站| 啪啪啪综合网| 91|九色|国产熟女| 老熟女乱子伦中文字幕一区二区| 欧美国产精品久久九九| 9 1果冻精品视频| 无码视频一区二区| 伊人97色天使| 免费的av网| 亚洲操人| 极品白嫩美女白浆成人福利在线看| 男人的天堂网页| 亚洲一二三四区在线免费看视频| 97视频www| 亚洲男人天堂2012| 特污免视频| 91啪啪视频| 极品美女福利在线观看| 国产在线强奸视频| 翔田千里AⅤHD无码| 色九久| 粉嫩久久久极品| 亚洲情色在线| 色综合加勒比四四季| 99热日本| 久久婷婷色| 免费在线观看国内色片网站网址| 韩日性爱av| 亚洲一区二区三区播放在线| 日韩精品在线视频在线观看| 成全在线观看免费观看| 熟女五十路一区二区三| 国产野战露脸在线播放| 久久人人爽爽人人爽人人片αV| 天天视频黄| 久久久久久久久久久免费精品| 丰满人妻一区二区三区蜜桃视频| A级在线视频| 欧美成人性爱视频在线播放| 国产强奸乱伦xd| A级片一区| 中文字幕三四区| 久久久精品网站| 东京热一区二区中文字幕| 草草影院最新网址| 国产树林里野战在线看| 久草婷婷| 日韩激情视频| 国产精品农村妇女精品| 欧美视频第二页| 特色a在线上| 欧美精品99久久久**| 免费家庭乱伦视频| 欧美性爱中文字幕无线码| 人人射人人操人人摸| 亚洲Av无码成人精品国产| 伊人色综合网电影 | 加勒比海人人操超碰在线| 男人天堂新| 精品人成视频在线观看| 久草视频分类在线| 五月婷亚洲精品天堂| 欧美色综合图片| 欧美日韩国产人人| 国产丁香精品露脸视频| 欧美 亚洲精品首页| 日本乱人伦片中文三区| 亚洲欧美中文日韩视频中国语| 久久97| 男人天堂.AB| 亚洲国产丝袜在线观看| 亚洲黄色| 亚洲精品xxx| 久草五月| 亚洲天堂资源| 操国产逼| 在线另类| 欧美中字不卡| 操逼无码操逼| 天天干天天拍| 人妖欧美一区二区| 亚洲成人性爱网站在线播放| 首页亚洲国产高跟丝袜诱惑视频| 美女黄码视频午夜| 人人操 欧美| 亚洲中文一区二区三区视频| 超碰天天去日穴| 激情色图| 五月丁香婷婷综合网| 青草香蕉网| 色欲三区| 天天综合有色网| www国产精品| 午夜电影在线观看无码专区| 白丝少妇一区二区| 国产福利电影| 天美传媒国产原创中文字幕亚洲欧美另类| 青青伊人这里只有精品| 丰满岳乱妇一区二区三区| 中文字幕视频2区| 黄色成年| 亚洲五月丁香花狠狠干一区二区三区| 东方亚洲在线操逼天堂| 亚洲欧洲综合成人av一区| 九九九综合精品| 亚州男人天堂| 久久久久久久久久久久久9999| 日韩精品一区二区人人人| 欧亚性爱啪啪| 狠狠干妹子| 亚洲最新av无码成人精品区| 草久久久| 亚洲国产精品成人综合| 少妇天堂网络| 日韩美女操b| 中文字幕一区二区三四五区日日骚| 天天影视色香欲综合网小说| 天天综合影院91| 日韩av性爱在线播放| 国产成人资源| 女性喷水高潮在线观看| 欧美日韩国产电影| 国模少妇一区二区三区| 日1区2区3区2020| 成人性爱电影网| 欧美午夜熟妇黑人精品91| 日本一级性爱| 妇女一区二区三区| 91jk色拍| 夜嗨影院| 久久久久久十| 久久久久久久久久久97| 1级午夜影院费免区| 亚洲男人天堂2016| 午夜黄色免费在线观看| 色色97爱| 91jk色拍| 日韩另类| 少妇一级无码精品| 日韩精品人妻中文字有码在线 | 欧美1区二区三区公司| 一区二区三区色综合| 国产欧美日韩在线不卡第一页| 99re99在线视频| 男人的天堂2019AV| 俄罗斯一区二区视频在线观看| 久久久久久久久久久久九| 国模无码一区二区三区在线| 国产日逼视频| 久久久神马影院| 嗯嗯啊中文字幕| 97在线精品观看视频| 国产自偷| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 久久99亚洲精品久久99果| 99av| 熟妇一区,二区,三区。| 日韩女优中文字幕| 欧美网站免费| 韩国一级婬片A片无码天美| 亚洲色棕合| 欧美精品另类人妖xxxx| 欧美日韩国内不卡| 欧美岛国精品在线观看| 国产精品对白自产拍| 亚洲国产成人高清在线| 久久男人网| 人人操人人操草草| 射丝袜大香蕉| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | www.婷婷五月天| 午夜乱轮操逼视频免费看| 中文字幕福利视频一区二区三区在线观看| 亚洲第一页欧美| 探花精品视频| 日本在线视频导航| 中文字幕精品一区二区精| 天天cao在线| 丰满人妻一区| 亚洲天堂人人妻| 超碰97爽| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 日韩免费看黄片| 1000部熟女视频在线观看| 夜夜高潮夜夜爽国产伦精品| 国产第二页| 综合网久久| 奸色色 男人天堂 天天射| 爱av免费| 影音先锋乱| 亚洲字幕一区二区| 青青久久手机线视频| 日本阿v天堂在线观看| 久久久不卡| 欧美日综合| 欧美中字不卡| 91精品人妻五十路| 果冻传媒一区二区三区| 五月天欧美色图| 操老熟女AV| 午夜AV污污污| 91在线丝袜| 97在线亚洲| 大香蕉伊然在亚洲91| av东京热男人的天堂| 上床不卡网站| 熟女精品一区二区在线观看| 97天天在线| 少妇色综合| 日韩综合97P| 伊人久大| 97免费在线观看| 上特色A在线| 操b在线观看| 最新无码国产| 国产精品嫩草影院免费| www.av在线观看| 欧美婷婷五月天| 五月天婷婷影院| 狠狠色色| 97视频在线观看高清资源| 超碰天天久久79| 岛国不卡超碰护士AV在线播放| 60秒免费视频| 国产一区二区在线看| 91n处女在线观看| 国产精品视频内谢女人| 亚洲?V无码专区在线电影| 人人操肉肉| 人人考人人摸人人干| 91丨九色丨国产打屁股| 艾草av| 男女性扦B| 亚洲毛片基地专区| 琪琪精品免费一区二区三区| 国产精品视频精品一二| 久久久九97| 无码人妻精品一区二区三区九九 | 婷婷久久大香蕉| 操操啪| 激情色色| 国模久久在线| 日韩性爱播放| 射丝袜高跟鞋99| 校园春色中文字幕AV| 天堂精品| 美女视频尤物网在线看| 久久婷婷亚洲| 欧美色图成人网一区二区| 日本97久久| 日韩性爱小视频| 亚洲一卡2卡3卡4卡乱码网站| 婷婷色综合| 九九九九九九视频| 十八禁视频一区二区| 熟女人妇一区二区三区| 欧美亚洲20p| 老熟乱一区二区三区四区| 国产9 9在线 | 亚洲| 无码99| 97在线青| 日韩综合成人免费视频| 青青草原人妻| 九九九不卡| 一级黄色视频网| 日韩精品99999| 99热日| 91丨九色丨国产丨人妻在线 | 国产欧美精选自拍一区| 午夜天天碰综合视频| 久草电影网| 免费的很黄很污的全部视频| 天天干天天操天天拍| 久久九九热| 免费一级特黄特色大片在线观看看| 少妇二级| 大香蕉中文在线| 牛黄色久午久| 亚洲国产亚洲天堂| 精品成人动漫一区二区| 日日黄色三级网站| 91精品久久久久五月天精品| 日欧美色| 亚洲高清无毛一区二区| 啊啊啊好舒服好爽啊啊啊视频| 舔足天天操天天射| 大香蕉123| 欧美激情 亚洲色图| 免费操逼视频下载| 久射吧| 特级丰满少妇一级AAAA爱毛片| 97 视频在线| 国产一区二区三三视频| 东北女人被操| 中文字幕一二区二三区人妻专区| 国产AV天美| 三级日韩一区二区三区| 诱惑人妻欧美一区在线播放| 亚洲色系另类精品国产| 在线亚洲丝袜视频网站| 日韩精品 视频一区二区| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 国产精品一区二区a| 久久久久久亚洲精品中文字幕人妻| 丰满人妻-区二区三区| 欧美黄页在线| 欧美一区二区福利在线| 久久 久久国内精品亚洲| 秋霞影音一区二区三区| 夜夜高潮夜夜爽夜夜爱爱一区| 亚洲中文字幕av| 天天伊人| 天天干人妻| 无遮挡猛进视频免费无限观看| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 污污污8888| 中国东北熟女老太婆内谢| 亚洲国产福利视频| 亚洲……91| 亚洲性爱免费电影| 超碰吊日色| 人人操天天爽| 插欧洲美女欧美精品| 97天天日| av东京热男人的天堂| 麻豆国产免费影片| 国产在线综合福利网站| 搡老熟女国产1000部| 992这里有精品| 国产极品精品美女视频| K8久久久久| 色婷婷综合久久中文字幕雪峰| 无套内射人妻在线播放| 天天色欧美| 久久99草| 91n美女视频| 欧美日韩岛国大片在线观看| 人人操人人爽人人操人人| 日本97久久| 亚州色图狠狠干| 99人人干| 激情视屏国产乱伦强奸| 草草草视频在线免费看| 四虎免费在线播放| 欧美大片天天看| 少妇无码太爽| 新久久AV| 亚洲无线码一区国产欧美国| 久9re热视频这里只有精品| 日韩精品人妻中文字幕不卡乱码| 另类 综合 日韩 欧美 亚洲| 九色 人妻 大香蕉| 无码日韩网站| 青椒国产97在线熟女| 热99这里有精品综合久久 | 久久25| 91一起操| 精品区国产区一区二区三区| 亚洲国产欧美另类自拍| 在线日韩精品一区二区三区| 老熟女综合网| 欧美精品亚洲精品日韩传电影| 男人天堂日日夜夜| 亚洲情色1区| 久久国产三区| 老女人爆菊| 91Chinese在线| 欧美日韩操逼嗦吊| 日本色色的视频| 在线中文字幕极品av| 国产毛片久久久久久久| 操逼逼一区视频| 久久超碰国产一区二区三区| 中文AV制服乱伦| 日本性感人妻91| 亚洲天堂久久久久久粉红视频| 国产精品一区二区三区免费视频| 99精品九九九九九九| 性欧美999| 亚洲综合嫩| 欧美大的香蕉有线电视视频| 加勒比中文av| 免费成人自拍视频在线| 欧美操人视频| 伊人丁香五月婷婷| 黄色AAAAA欧美| 中国乱伦一区二区| 亚熟在线| m欧洲一级午老| 99re6国产精品99re| 久久久久婷婷精品av电影| 少妇特黄一区二区三区| 国产91 丝袜在线播放00-百度| 亚洲啪啪视频一区二区| 国产精品成人蜜臀AV在线| 国产精品懂色tv影视免费观看| 国产伦精品| 校园春色五月天| 亚洲综合首页| 岛国在线免费视频| 91丨熟女丨丰满熟女| 亚洲综合九九| 国产精品天美传媒| 97国产色图 | 伊人久久大香大香线蕉中文 | 97热视频在线观看| 亚州黄站| 亚洲欧美日韩制服另类| 在线观看岛国有码| 婷婷色色五月| 日夜干射色啊| 情色大香蕉| 粉嫩av在线| 国产精品亚洲无码| 五月丁香综合啪啪| 男人的天堂色偷偷青青草视频婷婷网| 欧美第一页| 97爱亚洲| 丝袜美腿制服人妻二区中文字幕| 色色色综合网| 91老熟女老女人国产老太| 久久激情四射婷婷丁香五月天| 97在线观看免费视频| 国产一区在线观看无码AV| 狠狠色婷婷777| 超碰97色色| 东京热毛片调教| 日本高清视频xxxx| 天天日夜夜爽| 公司1区2区3区精产精| 九九综合九九综合| 抽插无码高清一区| 西西美女视频网| 欧美激情专区| 熟女视频久久| 老司机午夜福利视频一区二区| 日日夜夜摸| 中文字幕av乱伦| 欧美亚洲美少妇一区二区| 欧美色图综合网| 操逼网站视频漫画国产| 欲香欲色综合天天伊人| 1级黄色夫妻对换性交免费看| 欧美日韩成人| 欧美激情一| 欧美一区二区三区蜜桃| 在线天堂999| 亚洲色交| 欧美色五月| 精品制服美女中文一区二区三区| 亚洲av综合色区图片亚洲| 在线女人91| 啊啊啊好想要| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 国产高清在线自在拍69| 黄色片,com| 久久97资源 网| 亚洲国产成人精品女人久久久| 大香蕉人妻| 四虎影视 亚洲无码| 青娱乐国产盛宴视频| 久久久久久中文版| 一级岛国大片| 欧美色天堂网在线视频| 欧美的性爱网站免费| 中文字幕丝袜人妻| 五月天我淫我色av| 亚洲三级网址久久最新| 欧美亚洲国产91在线| 色婷婷aV一区二区三区麻豆综合| 亚洲AV无码AV吞精久久久久| a人欧美综合天堂麻豆| 国产无码久久高清| 艾草av| 天天日夜干| 精品少妇后入一区二区三区四区人妻巨乳 | 中日韩久久久免费看| 久久久免费一级黄片| 91老熟女91老女人| 亚洲1区| 超碰偷拍| 伦在线97| 97爱碰| 男人的天堂久久狠| 亚洲第一狼人丝袜美女另类| 青草视频人妻在线观看| 岛园激情| 亚州性色| 天天综合网在线| 国产一区二区精品久久99| 国产丸一视频| 久久久久9| 欧美亚洲图片| 久久国模av| 久久婷婷综合国际产色怕| 午夜福利 成人 91| 中文高清一区二区的| 国产无吗在线播放| 色亚州人久干视频在线观看免费版| 日韩欧美字幕亚洲一区二区| 青青草好吊色| 射欧美综合| HEYZO高无码国产精品227| 91操熟女视频| 国产男女无套97| 欧美黑人精品一区二区| 啊啊啊啊好多水| 97硬碰| 美国aaaaa一级黄片| 91欧美经典| 97天天弄| 亚洲精品色| 成 人片 黄色大片| 中文字幕福利视频一区二区三区在线观看| 花野真衣| 国产成人无码高清| 人妻9117c| 欧美日韩国产色五月综合在线| 日韩AV电影网站| 成人八戒网站| 91视频精品| 一卡二卡三卡| 丁香六月激情综合| 在线黄色污污网站| 热九九精品| 成人麻豆av电影网站| 91白嫩| 老鸭窝黄色视频网站| 99色在线| 国模无码一区二区三区在线| 91精品国产91久久福利| 九九九久久久W精品| 日韩天天本| 午夜福利久久久噜久噜久久综合| 牛牛aV| 国产熟女完整版中字| 17c嫩草51久久91嫩草| 久久熟女嫩草成人片免费| 欧美精品91| 超碰超碰95| 99综合| 欧美 亚洲 制服 精品| 国产av强奸美女| 国语人妻精彩刺激| 久久爽爽精品| 亚洲男人天堂网久久| 五月激情小说| 免费看日本操逼视频| 欧美性爱中文字幕无线码| 91久久久亚洲| 91综合网| 秋霞午夜成人福利片片| 国产女人视频三四五区| 91精品91久久久中77777| 欧美另类天堂| 亚洲图片视频小说| 中文精品少妇天堂| 欧美偷| 国内外毛片在线观看| 秋霞鲁丝午夜无码一区二区三| 蜜臀AV成人精品蜜臀| 亚洲大色堂| 性性久久| 欧美极品少妇| 亚洲猛交| 人人妻人人澡人人爽人人精品浪潮| 99re99在线视频| 精品人妻一区二区三区四区| 东京太热男人的天堂久久久| 色综合天天爱去电影网| 国产老女人久久毛| 中文AV制服乱伦| 婷婷丁香九月| 欧美成人一级免费电影| 影音先锋中文字幕日本好一区二区| 午夜欧美女人操逼| www久| 欧美日韩国产传媒在线精品| 成人网欧美风情| 久久一本大香蕉| 骚货操死你| 91精片| 免费一级a毛片久久久久久鸭绿欲| 亚洲国产奇米影视久久| 亚洲欧美日韩精品久久久一区二区 | 亚洲美女精品九九视频| 高清孕妇孕交| 精品成人亚洲午夜电影| 色五月av| 色婷婷淫色网| 九九九不卡| 国产精品免费久久久久久久久久| 人人爱人人乐人人操| 一级@啪啪视频| 伊人久久大香大香线蕉中文 | 天综合网欧美| 日韩久射综合| 欧美激情性久久久久久| 亚洲欧美日韩夜夜| 久久久久密| 欧美日韩美女精品久草一区二区三区 | 好湿好紧视频| 日日干天天干夜夜爽| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 蜜桃视频精品一区二区| 9999亚洲电影| 干少妇视频| 熟女五十路一区二区三| 欧美综合站| WWW美腿丝袜香蕉中文| 亚洲国产综合图区中文字幕| 333kkkk·亚洲com久久| 91啪9色| 中日韩久久久免费看| 无遮挡男女激烈动态图| 人人扣人人操| 色婷婷久久综合超碰| 欧美 亚洲精品首页| 亚洲最大成人a毛毛片| 91在线页| 97欧美日韩精品| k频道色撸撸| 麻豆影音天美视频| 91在线观看,天天综合| 中文字幕AV乱伦| 精品丰满人妻一区二区三区免费观| 亚洲精品国产av天美传媒| 色97欧美| 精品久久久久av影院| 亚洲 欧美 中文 日韩超碰| 99国产精品自在自在| 91福利网在线观看| 九九亚洲视频| 中字一区| 成人日韩欧美| 97 九色| 超碰97人妻免费在线| 婷婷导航| 999国产精品999久久久久久| 久久美女国产| 自拍二页| 翔田千里AⅤHD无码| 九九毛片这里只有精品| 国产sv美女内射| 精品亚洲国产成人AV制服丝袜| 中日无幕一二三四区| 双插性欧美一二三区| 啊啊啊啊啊啊啊国| 2017天天拍大香蕉| 久热超碰| 亚洲欧美97| 无码伊人久久大杳蕉中文无码| 动漫av中文| 日韩精品一区二区日韩| 九九成人精品| 少妇一区二区三区高速| 99九九久久| 欧美五十路熟| 玖玖资源中文字幕制服丝袜| 伊人丁香五月婷婷| 免费网站观看www在线观| 青青青国产手线观看视频2| 成 人 影视 一区 二区 三区 四区| 日韩情色一区二区| 日韩人妻资源网| 欧美牲| 国产伊人自拍| 我要去看2个日本美女.com曹逼| 大香蕉伊人网WWWn0n| 日韩兔费看黄片| 久久国产视频专区一二三| yw尤物av无码点击进入麻豆| 后入内射蜜桃臀| 美国精品国产精品| 国产精品一区二区后入| 大香蕉一线视频| 欧美色亚洲色| 蜜臀久久99精品久久久老,,| 亚洲网站一区二区在线| 青青草啪啪网| 亚洲无吗在线视频| 欧美97av| 久久久精品日本一道| 岛国黄片网站| 国产视频小说| 97人人草| 九九九精品成人免费视频小说| 啊啊啊啊啊好大好舒服想要| 久久高清欧美国产| 大鸡巴久久| 国产青一二三| 3d成人精品一区二区| 99AV| 中文字幕乱碼在线| 日本一级二级三级网站| 99热在线播放| 人妻大相焦在线| 日韩国产中文字幕| 欧美AAAA黄片| 五十路熟女,国产欧美精品区一区二区三区| 五月丁香综合激情| 搡老熟女免费视频 | 美女让帅哥通她小鸡鸡| 人妻少妇久久久| 性暴力欧美猛交在线直播| 欧美色图在线视频少妇| 天美国产精品| 日本熟妇人妻中出视频| 97九色| 尤物AV免费网站| 日少妇亚洲版| 激情五月天丁香| 亚洲AV无码翔田千里网站| 国产馆| 午夜黄色免费在线观看| 伊人在线大香蕉二。| 91天天日| 欧美性爱精品一区二区| 性爱网站一区二区| 少妇三p| 日本精品久久久久久久| 91狠狠综合久久久久久| 天天日B夜夜干B时时操B| 国产色产精品在线观看| 婷婷探花久久精品一区| 亚洲中文电影| 大香蕉免| 密桃99999| 亚洲经典啪啪| 99国产在线 精品 视频| 久9视频| 97精品国产精品免费观看| 99视频自拍| 欧美呦呦性爱| 啪啪自拍九九综合| 日本国产二线女色| 亚洲男人的天堂网| 久久精品一区| 2011国产精品| 99热综合| 看一级黄色视频| 国产综合网站在线播放 | 日本97久久| 中文字幕久久亚州无码| 欧美五区| 干b网| 欧美一二在线| 亚洲有码 视频一区| 超碰人人干| 国产一区二区欧美日本| 99国产精品视频尤物| 国产隔壁老王影院在线| 亚洲丝袜色| 国产精品白丝AV| av久日| 欧洲精品一区二区三区| 一区二区三区日韩欧美| 精品久久久av| 色鬼在线综合| 九九九久千久久激情蜜桃在线看 | 国产吹潮女在线观看| 欧美天堂亚洲电影院一区在线播放| 性色国产东北露脸精品视频| 69精品人人人人| 第四色亚洲色图| 极品粉嫩少妇视频| 九九九精品一区二区无码| 亚洲涩涩| 91九色丰满高潮| 伊人宅男大香蕉| 亚洲 欧美 色图| 久久久久亚洲Av无码专区老牛影视| 男人天堂网址| 成人小说视频在线精品欧美| 双插性欧美一二三区| 乱伦3P视频| 99色热| AV天堂电影网| 婷婷15月天青娱乐| 啊啊啊在线看| 一本久久久精品| 亲子敌伦对白在线播放| 91av熟女人妻| AV污污污污| 成视频在线观看免费看| 激情六月天| www鬼畜国产男人的天堂| 亚洲91网。| 91少妇通奸网站| 不卡二三区人妻少妇| 日韩有码 一区二区三区| 人妻81p| 男人兔费天堂| 老熟妇综合| 欧美伦乱| 精品人妻一区二区三区四区石在线| 九月丁香婷婷色| 开心五月婷婷激情| 国产蜜臀精品一区二区尤物| AV中亚| 色嗨嗨在线| 亚州情色j区| 国产精品久久久九九九| 亚洲国产日韩精品久久久| 我要去看2个日本美女.com曹逼| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 久久爱97| 久久精品久久九九精品| 亚洲欧美精品91| 330dv亚洲成年视频网| 熟女少妇视频| 欧美一级久久久丰满| A久久| 美熟女逼导航AV操逼| 一级二级在线观看| 丝袜熟女一区二区三区| 99re这里只有精品3| 蜜臀va69| 精品午夜福利国产一区二区在线观看| 五月婷婷综合激情| 国产亚洲精品美女| 91操熟女| 99热色精品| 国产后入清纯| AA级电影三区| 老鸭窝亚洲毛片| 噜噜噜噜天天狠狠| 浪人综合网| 丝袜天堂| 色牛aV| 国产精品交换一区二区| 少妇熟女视频一二三区| 高潮的A片激情扒开一区| 青草青青久久久久久国产| 91在线国产后入风骚翘臀美女素人| 久操操AV电影| 亚洲欧美中日韩| 97超碰超| 五月丁香婷婷色| 久久久久久无码人妻中文字幕| 家庭乱伦国产| 自拍欧美| 中国农村熟妇毛片视频| 久久国色天香香蕉| 精品人妻一区二区三区鲁大师| 日韩性爱高清免费视频| 熟女精品一区二区在线观看| 国产男女边吃边摸视频网站| 人人喜人人妻| 熟妇乱伦一区二区| 美女露胸露尿口| 日韩免费中文字幕视频| 国产原创自拍| 偷拍盗拍亚洲色图图片 | 裸体美女国产免费久久久网站| 在线电影亚洲色图| 欧美成人一级免费电影| 欧美激情色婷婷花野真衣一区二区| 久草精品国产99| 五月天伊人| 无码高清少妇久久| 狠插 制服 自拍| 大香蕉免费3| 色婷婷婷五月天激情四射| 91一区二区三区蜜桃| 特级大荫道BBwBBwBBW| 乱伦熟妇一区二区| 天天日天天射天天干| 一区二区精品日韩欧美在线观看| 嗯……啊…嗯嗯…啊…好舒服| 久久丁香久草综合网| 亚洲永久永久永久永久一级一级一级精品 | 国产成人欧美一区二区三区的国产| 一区二区三区四区久久视1| 少妇啪啪自拍| 久久久久幕乱码| 丰满的三级少妇欧美久久久| 偷拍导航视频网站| 精品一区二区三区蜜桃臀赵总| 亚洲91网站| 2018天天日天天日| 丁香五月天久久精品视频一区二区三区| 亚洲国产精品无码AV久久久| 久神马| 国产乱码精品一区二区三区四川| 欧美综合自拍亚洲综合图| 激情五月激情综合网| 爱爱啊啊啊| 日本东京热大香蕉a片| 九月丁香综合网| 草草草视频| 国模不卡一本二本三电影| 中文字幕狠狠玩| 97超碰色情| 久久久国产精品人妻丝袜| 国产熟女乱论| 加勒比综合| 久久久男人的天堂| 99热这里是精品| 无码人妻精品一区二区三区99不卡| 98福利在线视频| 精品久久視頻在线| 日本三级A片网站com| 四虎在线视频| 久久有码| 26uuu欧美| 日韩人妻一二三区视频| 91精品导航| 亚州熟妇精品| 禁片 高清 在线观看视频网站| 激情五月婷| 国产精品第一页国产大屁股视频免费区| 91久久国产综合久久| 国产精品久久久久久照片| 91N综合网| 伊人操操| 中文字幕精品一区二区精品| 国产精品视频麻豆入口| 99热销国产这里有精品| 动漫av中文| 91老司机在线视频免费观看| 亚洲97久久精品亚洲| 精品国产乱码久久| 玖日综合网| 国产精品视频播放| 欧美熟女少妇| 在线无码操| 久久黄色视频一区二区三区 | 欧美日韩在线视频网站| 日韩无码服务区| 91老熟女老女人国产老太| 暖暖精品二区三区观看| 丁香婷婷大香蕉| 东北丰满熟女国产一区| 99精品国产户外露出| 日韩小电影| 我爱操| 欧美影音在线| 精品无人区麻豆乱码久久久| 欧美1727免费观看视频| 欧美亚洲中文字幕| 鸡巴插逼视频| 91深夜夜| 一级岛国大片| 精品人妻免费观看| 射综合网| 美女诱惑久久| 唯美清纯 妖精视频| 97精品一区| 日本不卡中文| 97国产精选| 蜜桃香蕉久草精品在线| www. 男人天堂成人在线| 东京热熟女亚洲视频网站| 国产男女无套97| 亚洲最大的黄色电影网站。 | 免费看黄片现成| 亚洲中字幕日本一区二区三区 | 99久久久无码| 色嘟嘟人妻天堂网| 欧美制服另类丝袜| 四虎永久在线精品免费网址| 女同在线视频一区| 欧美激情总合网| 国产久久视频| 极品内射| 天天舔天天日天天射| 道久久五香丁月婷婷激情综合| 97热视频在线观看| 人妻少妇久久中文| 国产深喉| 大香蕉伊人75| 97干色| 成人精品久久久午夜福利| 波多野结衣一级视频| 秋霞无码av鲁丝片一区|