
(圖片來源:使用 AI 技術生成)
如果您最近剛把自託管的 Dify 升級到 1.13.1 或更高版本,且剛好是使用 Oracle OCI 或 Cloudflare R2 等 S3 相容儲存的苦主,您可能會發現檔案上傳功能突然掛掉了,查看容器 Log 會看到這段錯誤:botocore.exceptions.ClientError: An error occurred (MissingContentLength) when calling the PutObject operation
這是一個典型的底層依賴相容性問題。這篇文章會帶您了解原因,並提供最精簡、不需要重新打包 Image 的修復方案。
問題根源:boto3 版本升級引發的相容性斷層
在 Dify 1.13.0 時,內建的依賴版本是 boto3==1.35.99,當時運作一切正常。但在升級到 1.13.1 後,Dify 將版本拉升到了 boto3==1.42.68。
根據社群回報,這是一個已知的相容性問題。在 boto3 >= 1.36.1 之後的版本,針對 S3 相容後端的 Checksum 與 Header 處理機制有所變動。在執行上傳(PutObject)時,它不再自動替某些串流內容注入 Content-Length 標頭。然而,許多 S3 相容服務(如 OCI)對此有嚴格要求,缺少了這個 Header 就會直接拒收請求,導致上傳失敗。
實戰解決方案:注入修補腳本
我們不需要重新打包 Dify 的 Images 這麼麻煩。最簡單的做法是利用 Docker 的 Volume 掛載功能,直接把修正後的邏輯注入容器即可。
步驟 1:準備修復腳本
- 在您的 Dify 專案目錄下(通常在
dify/docker/裡)建立一個override/資料夾。 - 到 Dify 官方 GitHub,切換到對應的版本 Tag(如
1.13.1)。 - 在
api/extensions/storage資料夾內,找到對應儲存類型的腳本(例如oracle_oci_storage.py),下載並放入override/資料夾。 - 接下來,編輯該
.py腳本,加入關鍵的Config設定:























