无法在 FTP 中创建新目录 (C#)
Cannot make new directories in FTP (C#)
我试图通过一个简单的 C# windows 应用程序将文件上传到我的 FTP 服务器 (EC2)。
我遇到的问题:如果该目录已经存在,我可以在其中创建一个文件。但是,如果该目录不存在,我将无法创建目录。
我检查了什么:我仔细检查了写入权限。我通过 WinSCP 登录,我可以毫无问题地在其中创建新目录。我给了用户权限。
我的代码:
private async void FileFTPUpload(string sourcefilepath, string folderPath) {
String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/12/1.txt";
Console.WriteLine("Ftp url : " + ftpurl);
String ftpusername = "myUserName";
String ftppassword = "myPassword";
try {
string filename = Path.GetFileName(sourcefilepath);
string ftpfullpath = ftpurl;
WebRequest ftp = WebRequest.Create(ftpurl);
ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
ftp.Credentials = new NetworkCredential(ftpusername, ftppassword);
ftp.Method = WebRequestMethods.Ftp.UploadFile;
FileStream fs = File.OpenRead(sourcefilepath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream ftpstream = ftp.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
} catch (Exception ex) {
Console.WriteLine("Exception Occurred : " + ex);
//throw ex;
}
}
现在,如果 "trial/12/" 存在,那么 1.txt 将被生成。否则,我得到错误:
System.Net.WebException: The remote server returned an error: (553) File name not allowed.
我不确定发生了什么,没有发生什么。需要一些帮助。
谢谢。
编辑:当我这样做时:
字符串 ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial";
它不创建目录。我只是创建了一个名为 "trial".
的文件
这样做 :
String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/";
给出相同的错误 553
您必须将代码分成两个请求。第一个应该创建目录,第二个应该上传文件。
var filePath = @"ftp://xx.xxx.xxx.xxx/trial/12/1.txt";
var credentials = new NetworkCredential(ftpusername, ftppassword);
{
// create directory
var directoryPath = Path.GetDirectoryName(filePath);
var request = WebRequest.Create(directoryPath);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = credentials;
using(var response = (FtpWebResponse)requestDir.GetResponse())
{
// TODO: handle errors
}
}
{
// upload file
using (WebClient client = new WebClient())
{
client.Credentials = credentials;
client.UploadFile(filePath, "STOR", sourcefilepath);
}
}
我试图通过一个简单的 C# windows 应用程序将文件上传到我的 FTP 服务器 (EC2)。
我遇到的问题:如果该目录已经存在,我可以在其中创建一个文件。但是,如果该目录不存在,我将无法创建目录。
我检查了什么:我仔细检查了写入权限。我通过 WinSCP 登录,我可以毫无问题地在其中创建新目录。我给了用户权限。
我的代码:
private async void FileFTPUpload(string sourcefilepath, string folderPath) {
String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/12/1.txt";
Console.WriteLine("Ftp url : " + ftpurl);
String ftpusername = "myUserName";
String ftppassword = "myPassword";
try {
string filename = Path.GetFileName(sourcefilepath);
string ftpfullpath = ftpurl;
WebRequest ftp = WebRequest.Create(ftpurl);
ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
ftp.Credentials = new NetworkCredential(ftpusername, ftppassword);
ftp.Method = WebRequestMethods.Ftp.UploadFile;
FileStream fs = File.OpenRead(sourcefilepath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream ftpstream = ftp.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
} catch (Exception ex) {
Console.WriteLine("Exception Occurred : " + ex);
//throw ex;
}
}
现在,如果 "trial/12/" 存在,那么 1.txt 将被生成。否则,我得到错误:
System.Net.WebException: The remote server returned an error: (553) File name not allowed.
我不确定发生了什么,没有发生什么。需要一些帮助。
谢谢。
编辑:当我这样做时: 字符串 ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial";
它不创建目录。我只是创建了一个名为 "trial".
的文件这样做 :
String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/";
给出相同的错误 553
您必须将代码分成两个请求。第一个应该创建目录,第二个应该上传文件。
var filePath = @"ftp://xx.xxx.xxx.xxx/trial/12/1.txt";
var credentials = new NetworkCredential(ftpusername, ftppassword);
{
// create directory
var directoryPath = Path.GetDirectoryName(filePath);
var request = WebRequest.Create(directoryPath);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = credentials;
using(var response = (FtpWebResponse)requestDir.GetResponse())
{
// TODO: handle errors
}
}
{
// upload file
using (WebClient client = new WebClient())
{
client.Credentials = credentials;
client.UploadFile(filePath, "STOR", sourcefilepath);
}
}