C#窗体客户端如何向服务器上的数据库上传下载文件
时间: 2023-09-19 12:10:53 浏览: 219
C#窗体客户端可以使用网络编程中的FTP(文件传输协议)或HTTP(超文本传输协议)协议来实现上传下载文件。下面分别介绍两种方式:
1. 使用FTP协议上传下载文件
FTP协议是一种常用的文件传输协议,C#中可以使用FtpWebRequest类实现FTP文件上传下载。具体步骤如下:
上传文件:
1. 创建一个FtpWebRequest对象,指定FTP服务器地址、用户名和密码,并设置FTP命令为上传文件。
2. 使用FtpWebRequest对象的GetRequestStream方法获取上传流。
3. 将要上传的文件读取到内存流中。
4. 将内存流中的数据写入上传流中。
5. 关闭上传流。
下载文件:
1. 创建一个FtpWebRequest对象,指定FTP服务器地址、用户名和密码,并设置FTP命令为下载文件。
2. 使用FtpWebRequest对象的GetResponse方法获取下载响应。
3. 使用下载响应的GetResponseStream方法获取下载流。
4. 将下载流中的数据读取到本地文件中。
5. 关闭下载流。
下面是一个简单的示例代码:
```csharp
using System;
using System.IO;
using System.Net;
namespace Client
{
class Program
{
static void Main(string[] args)
{
// 上传文件
string ftpServer = "FTP服务器地址";
string userName = "FTP用户名";
string password = "FTP密码";
string localFilePath = "本地文件路径";
string remoteFilePath = "服务器文件路径";
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftpServer + remoteFilePath));
ftpRequest.Credentials = new NetworkCredential(userName, password);
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
using (FileStream fs = File.OpenRead(localFilePath))
using (Stream ftpStream = ftpRequest.GetRequestStream())
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
do
{
bytesRead = fs.Read(buffer, 0, buffer.Length);
ftpStream.Write(buffer, 0, bytesRead);
}
while (bytesRead > 0);
Console.WriteLine("文件上传成功!");
}
// 下载文件
string localFolderPath = "本地文件夹路径";
string remoteFileName = "服务器文件名";
ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftpServer + remoteFileName));
ftpRequest.Credentials = new NetworkCredential(userName, password);
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
using (WebResponse response = ftpRequest.GetResponse())
using (Stream ftpStream = response.GetResponseStream())
using (FileStream fs = new FileStream(localFolderPath + "\\" + remoteFileName, FileMode.Create))
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
do
{
bytesRead = ftpStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, bytesRead);
}
while (bytesRead > 0);
Console.WriteLine("文件下载成功!");
}
Console.ReadKey();
}
}
}
```
2. 使用HTTP协议上传下载文件
HTTP协议是一种常用的超文本传输协议,C#中可以使用HttpClient类实现HTTP文件上传下载。具体步骤如下:
上传文件:
1. 创建一个HttpClient对象。
2. 使用HttpClient对象的PostAsync方法上传文件。
3. 将要上传的文件读取到内存流中。
4. 将内存流中的数据写入上传流中。
5. 关闭上传流。
下载文件:
1. 创建一个HttpClient对象。
2. 使用HttpClient对象的GetAsync方法下载文件。
3. 使用下载响应的Content属性获取下载流。
4. 将下载流中的数据读取到本地文件中。
5. 关闭下载流。
下面是一个简单的示例代码:
```csharp
using System;
using System.IO;
using System.Net.Http;
namespace Client
{
class Program
{
static async Task Main(string[] args)
{
// 上传文件
string serverUrl = "服务器地址";
string localFilePath = "本地文件路径";
string remoteFilePath = "服务器文件路径";
using (HttpClient httpClient = new HttpClient())
using (FileStream fs = new FileStream(localFilePath, FileMode.Open, FileAccess.Read))
using (StreamContent streamContent = new StreamContent(fs))
using (HttpResponseMessage response = await httpClient.PostAsync(serverUrl + remoteFilePath, streamContent))
{
Console.WriteLine("文件上传成功!");
}
// 下载文件
string localFolderPath = "本地文件夹路径";
string remoteFileName = "服务器文件名";
using (HttpClient httpClient = new HttpClient())
using (HttpResponseMessage response = await httpClient.GetAsync(serverUrl + remoteFileName))
using (Stream stream = await response.Content.ReadAsStreamAsync())
using (FileStream fs = new FileStream(localFolderPath + "\\" + remoteFileName, FileMode.Create))
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
do
{
bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
await fs.WriteAsync(buffer, 0, bytesRead);
}
while (bytesRead > 0);
Console.WriteLine("文件下载成功!");
}
Console.ReadKey();
}
}
}
```
注意:在实际开发中,需要根据具体需求进行上传下载文件的协议设计和错误处理等。
阅读全文