C# 实现FTP上传资料的示例
在 C# 中,我们可以使用 FtpWebRequest 类实现文件的上传和下载操作。下面我将详细讲解如何使用 FtpWebRequest 类实现 FTP 上传资料的示例。
步骤
以下是 C# 实现 FTP 上传资料的步骤:
- 创建 FtpWebRequest 对象,设置 FTP 服务器的地址、用户名、密码和操作类型(上传或下载等)。
- 设置上传文件的路径和文件名。
- 打开需要上传的本地文件,获取文件流。
- 设置上传文件的传输模式和文件的数据类型。
- 写入文件流到 FTP 服务器。
- 关闭文件流和 FTP 连接。
现在我们来看一下两个实例:
示例1
需求:将本地文件上传到 FTP 服务器的指定目录下。
以下是代码:
using System;
using System.IO;
using System.Net;
class FtpUpload
{
static void Main(string[] args)
{
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com/upload/");
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
using (FileStream fileStream = File.OpenRead("localfile.txt"))
{
using (Stream ftpStream = ftpRequest.GetRequestStream())
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, bytesRead);
}
}
}
}
}
在上面的代码中,我们使用 FtpWebRequest 对象创建 FTP 连接,并设置了 FTP 服务器的地址、用户名、密码和上传文件的路径。接着,我们获取了需要上传的本地文件流,并将其写入到 FTP 服务器上。最后,关闭了文件流和 FTP 连接。
示例2
需求:将本地文件夹以及文件夹中的所有文件上传到 FTP 服务器。
以下是代码:
using System;
using System.IO;
using System.Net;
class FtpUploadDirectory
{
static void Main(string[] args)
{
string localPath = @"C:\temp";
string remotePath = "/upload/";
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com" + remotePath);
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse ftpResponse;
try
{
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpResponse.Close();
}
catch (WebException)
{
// folder already exists
}
foreach (string file in Directory.GetFiles(localPath))
{
using (FileStream fileStream = File.OpenRead(file))
{
ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com" + remotePath + Path.GetFileName(file));
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream ftpStream = ftpRequest.GetRequestStream())
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, bytesRead);
}
}
}
}
foreach (string directory in Directory.GetDirectories(localPath))
{
string dirname = Path.GetFileName(directory);
ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com" + remotePath + "/" + dirname);
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpResponse.Close();
UploadFolderContents(directory, remotePath + "/" + dirname);
}
}
static void UploadFolderContents(string localPath, string remotePath)
{
FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse;
foreach (string file in Directory.GetFiles(localPath))
{
using (FileStream fileStream = File.OpenRead(file))
{
ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com" + remotePath + "/" + Path.GetFileName(file));
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream ftpStream = ftpRequest.GetRequestStream())
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, bytesRead);
}
}
}
}
foreach (string directory in Directory.GetDirectories(localPath))
{
string dirname = Path.GetFileName(directory);
ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com" + remotePath + "/" + dirname);
ftpRequest.Credentials = new NetworkCredential("username", "password");
ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpResponse.Close();
UploadFolderContents(directory, remotePath + "/" + dirname);
}
}
}
在上面的代码中,我们使用 FtpWebRequest 对象创建 FTP 连接,并设置了 FTP 服务器的地址、用户名、密码和上传文件的路径。接着,我们创建了上传文件夹的目录。然后,我们遍历本地文件夹下的所有文件和子文件夹,并递归上传所有的文件和子文件夹到 FTP 服务器上。最后,关闭了文件流和 FTP 连接。
以上就是使用 FtpWebRequest 类实现 FTP 上传资料的完整攻略和两个实例的说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 实现FTP上传资料的示例 - Python技术站