文件

已知限制

本頁整理目前程式碼中會影響部署與使用的行為限制與缺陷,每項附上所在位置。

錯誤處理缺陷

位置 行為 影響
handlers/PostToPath.go 類型檢查 不支援的類型只設定 errMessage,err 為 nil;HandleError 呼叫 err.Error() 觸發 panic 由 gin Recovery 回 500,而非預期的 400
handlers/GetFromPath.go 解碼 vips.NewImageFromBuffer 失敗後送出錯誤但沒有 return,接著存取 nil 的影像 panic 發生在 goroutine 內,gin Recovery 攔不到,整個程序結束
handlers/GetFromPath.go streamImage ResponseWriter 不支援 http.Flusher 時遞迴呼叫自己 無限遞迴;Gin 預設的 ResponseWriter 支援 Flusher,一般部署不會觸發

並行與逾時

三個處理器的結果 channel 皆無緩衝。逾時回 408 後沒有人接收結果,背景 goroutine 會永久阻塞在送出那一行;上傳與讀圖的 goroutine 也會在處理器返回後繼續存取 gin.Context。

快取

限制 說明
刪除不清快取 原檔移入回收桶後,storage/image/cache/ 的轉檔結果仍會被回傳(見 快取分層)
快取 key 未正規化 q=75 與不帶 q 輸出相同,卻產生兩個快取檔
副檔名衝突 快取檔名去掉原副檔名,同資料夾的 photo.jpg 與 photo.png 以相同參數讀取時共用同一個快取檔
無容量上限 本地快取檔不會過期或淘汰

安全與部署

限制 說明
無驗證 Go 服務不驗證上傳與刪除請求;Nginx 白名單預設為註解狀態
路徑未限制 上傳與刪除以 filepath.Join 組合路徑,未檢查結果仍位於 storage/image/upload/ 內
類型只看標頭 上傳類型依 part 的 Content-Type 判斷,不檢查檔案內容
佔位圖不在 repo .gitignore 的 **/image/ 排除了 app/internal/assets/image/,需自行提供 404-light.svg/404-dark.svg
錯誤時狀態碼 讀圖失敗以 c.File 回傳佔位圖,HTTP 狀態碼為 200 而非 404
EN