使用 WebClient FTP 上傳檔案發生 553 錯誤

在 .NET 要 FTP 上傳檔案,最精簡有效的做法莫過於使用 WebClient,例如:

using System;
using System.IO;
using System.Net;
 
public class CSharpLab
{
    public static void Test()
    {
        string userName = "ftpAccount";
        string password = "ftpPassword";
        string uploadUrl = "ftp://myFtpServerHost/someFolder/test.txt";
        byte[] data = new byte[] { 0x31, 0x32, 0x33 };
        WebClient wc = new WebClient();
        wc.Credentials = new NetworkCredential(userName, password);
        wc.UploadData(uploadUrl, data);        
    }
}

這個寫法在專案中廣泛運用多年都沒遇到什麼問題。近日同事在 FTP 上傳某一主機時,卻發生 553 File name not allowed 錯誤:System.Net.WebException: The remote server return an error: (553) File name not allowed

手動 FTP 登入上傳,確定路徑、權限都沒有問題。爬文發現,原來 Linux FTP Server 與 IIS FTP Server 存在行為差異

Linux FTP Server 不像 IIS 有共用的 FTP 根目錄,登入後會處於該帳號的使用者根目錄(例如:/home/username),因此對Linux FTP Server,ftp://myFtpServerHost/someFolder/test.txt 將指向 /user/home/someFoler/test.txt,如果要指向絕對路徑,需多加一根「/」,寫成 ftp://myFtpServerHost//someFolder/test.txt 。

過去面對的 FTP 主機都是 Windows 故沒發現,第一次遇上 Linux FTP 主機才學到這點。問題在修改 URL 多加 / 後排除,結案。

歡迎推文分享:
Published 03 May 2017 06:44 AM 由 Jeffrey
Filed under:
Views: 3,081



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<May 2017>
SunMonTueWedThuFriSat
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication