現象
UploadFileWithUniqueName 正常(生成唯一文件名)。
UploadFile 報 550 錯誤(文件已存在無法覆蓋/刪除)。
根因
FTP 目錄/文件缺少「刪除」權限。UploadFile 覆蓋邏輯通常為「刪除舊文件 → 上傳新文件」,若 FTP 用戶無刪除權限則失敗,返回 550。
驗證方法
- 手動用 FTP 客戶端(FileZilla)登錄,嘗試刪除目標文件 → 失敗確認權限問題。
- 將文件改名後上傳 → 成功,證明寫入權限正常,僅缺刪除權限。
解決方案
- FTP 服務器配置:給上傳用戶分配「刪除」權限(IIS FTP Authorization Rules → Allow Delete)。
- 代碼繞過:上傳前先刪除(
WebRequestMethods.Ftp.DeleteFile),捕獲異常後再上傳,或用唯一文件名模式。
- 應用層面:文件名含時間戳/UUID,避免衝突,定期清理任務刪除舊文件。
參考:StackOverflow 同類問題