關于簡書無法上傳圖片的問題

背景


這個問題最初是在 8 月份發(fā)現(xiàn)的,當時寫完文章準備同步到簡書的時候發(fā)現(xiàn)圖片上傳一直失敗,打開 F12 一看是 獲取七牛云 token 這個接口返回了空數(shù)據(jù):

{"token":"","key":"upload_images/12345678-xxxxxxxxxxx"}

沒有有效的 token 圖片自然就無法上傳到 七牛云 了。想著這么簡單的問題應該很快就能解決就沒去管它了。

cover

結果,一個月過去了還是不能上傳,但是發(fā)現(xiàn)首頁一些新發(fā)布的文章都是帶圖片的,說明我的問題只是個例,或者是手機上傳有不同的接口?

又過了幾天,抱著試一試的心態(tài)上傳圖片,結果突然就好了。( 此時問題實際上仍未修復 )

問題復現(xiàn)


截止 2023 年 11 月,這個問題應該是修復了,暫時沒法復現(xiàn),本文僅用于記錄。

最近正好打算做一個類似于 Wechatsync 的文章同步工具,先拿簡書接口試試手,代碼噼里啪啦一頓寫,一運行才發(fā)現(xiàn)接口跑不通,也是納悶了,明明瀏覽器上剛跑了沒問題的。

接口掛了就掛了,給個錯誤信息就好了,偏偏還返回了一個完整的 JSON ,字段名都有,字段值卻是一個空字符串,導致我一度懷疑是 Axios 的鍋。。。

測試了下面幾種情況:

  • 瀏覽器 - Fetch
  • 瀏覽器 - Ajax
  • 命令行 - curl
  • Postman
  • Node.js 原生網(wǎng)絡請求 API

想不通為什么最后兩種情況接口訪問會出錯,直到用 curl 調試( -v )時才發(fā)現(xiàn)問題:域名解析后的 IP 地址是 IPv6 格式的。

curl -v

禁用了網(wǎng)卡屬性中的 IPv6 協(xié)議,果然瀏覽器上也出錯了。

解決方法


切換為支持 IPv6 的網(wǎng)絡,目前手機網(wǎng)絡應該都支持 IPv6 了吧,可以開個熱點給電腦試試。

檢測方法:

切換網(wǎng)絡后不生效可以試下:

  • 禁用后再啟用網(wǎng)卡屬性中的 IPv6 協(xié)議

    網(wǎng)絡和共享中心 -> 更改適配器設置 -> 右鍵網(wǎng)卡屬性 -> 勾選 / 取消勾選 Internet 協(xié)議版本 6 (TCP/IPv6)

  • 刷新 DNS 緩存

    ipconfig /flushdns
    

在 Node.js 中設置 IPv6 訪問優(yōu)先( 參考


import * as dns from 'node:dns';

export function useIpv6First() {
  dns.setDefaultResultOrder('verbatim');
}

export function useIpv4First() {
  dns.setDefaultResultOrder('ipv4first');
}

Node.jsv17.0.0 版本起, verbatim 選項的默認值改為 true ,也就是默認優(yōu)先 IPv6 。( 參考

getDefaultResultOrder API 在舊版本 Node.js 中不支持,代替方案是手動指定一種模式為 默認值 ,想要還原的時候切換回這種模式即可。

其他


  • 為什么要做一個 文章同步的工具

    由于文章不是首發(fā)在簡書上的( 其他平臺也是一樣 ),同步過來難免要重新上傳外鏈圖片,但是圖片一多就老是會上傳失敗。上傳失敗就算了,還把原文內容替換成 [圖片上傳失敗...(image-xxxxx)] 的做法屬實有點惡心了,一篇幾萬字的文章如果格式被破壞了想想就頭大。而每次手動一張張圖片替換也沒那個時間,干脆寫個小工具做自動轉換。

  • 簡書上傳圖片會被壓縮失真怎么辦

    親測圖片文件名后綴改為 gif 就可以阻止壓縮了。( 參考

最后


回過頭來才想起,家里有好幾個無線路由器,老的路由器不支持 IPv6 而新的路由器支持,平常用的時候也沒注意都是隨機連接的,所以就出現(xiàn)了這個圖片上傳問題時好時壞的現(xiàn)象。

IPv6 普及以來,雖然見慣了各種 APP 在開屏廣告上 標注支持 IPv6 ,但還是頭一回感受到它帶來的影響。當然,像簡書這樣“全身心”撲在 IPv6 上,而 IPv4 服務掛了而不自知的應用也是頭一回見。

一款好的產品,它的開發(fā)者必須得是它的重度用戶,否則又怎么能第一時間發(fā)現(xiàn)并解決問題呢?


轉載請注明出處: https://github.com/anyesu/blog/issues/47

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容