私はストレステストにFTPを介してファイルをアップロードする.NETアプリケーションの機能を試しています。この関数は、.NETの組み込みのFtpWebResponse
クラスを使用します(ユーザーのサーバーがSSH接続をサポートしていない場合に備えて)。次のコードを使用して、ユーザーのディレクトリのUbuntuサーバーに"test up1/archive: * OR | or $ or <and>."
ディレクトリを作成します。FtpWebResponseは、WebRequestMethods.Ftp.MakeDirectoryメソッドのディレクトリをUbuntuサーバーの特定のディレクトリ名のために作成できません。
"archive: * OR | or $ or <and>."
ディレクトリを作成しようとすると
//First call succeeds
string strPath = "ftp://webhost.com/%2F/UserDir/" +
Uri.EscapeDataString("test up1") + "/";
createDirViaFTP(strPath);
//but then this call fails
strPath += Uri.EscapeDataString("archive: * OR | or $ or <and>.") + "/";
createDirViaFTP(strPath);
static bool createDirViaFTP(string strURI)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(strURI);
request.EnableSsl = bUseSsl; //can be either false or true
request.Credentials = = new NetworkCredential(strUsrName, secUsrPwd);
request.UseBinary = true;
request.Timeout = -1;
request.Method = WebRequestMethods.Ftp.MakeDirectory;
try
{
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
if (response.StatusCode == FtpStatusCode.PathnameCreated)
{
//Created OK
return true;
}
}
}
catch(Exception ex)
{
//Failed
Console.WriteLine("EXCEPTION: Path=" + strURI + "\n" + ex.Message);
}
return false;
}
私createDirViaFTP
への2回目の呼び出しは、次の例外がスローされます。
EXCEPTION: Path=ftp://webhost.com/%2F/UserDir/test%20up1/archive%3A%20*%20OR%20%7C%20or%20%24%20or%20%3C%20and%20%3E./
The remote server returned an error: (550) File unavailable (e.g., file not found, no access).
しかし、なぜ?私はここで間違って何をしていますか? 2番目のディレクトリ名にあるこれらのシンボルはすべて、合法的なLinuxファイル名でなければなりません。 SSHシェルで同じディレクトリを作成できます。
サーバー上の任意のFTPクライアントを使用して、このような名前のフォルダを作成できますか? –