我正在使用 .NET 4 C#.我正在尝试将 ZIP 文件上传然后下载到(我的)服务器.
I am using .NET 4 C#. I am trying to upload and then download a ZIP file to (my) server.
为了上传我有
using (WebClient client = new WebClient())
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(MyUrl);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.EnableSsl = false;
request.Credentials = new NetworkCredential(MyLogin, MyPassword);
byte[] fileContents = null;
using (StreamReader sourceStream = new StreamReader(LocalFilePath))
{
fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
}
request.ContentLength = fileContents.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Length);
}
FtpWebResponse response = null;
response = (FtpWebResponse)request.GetResponse();
response.Close();
}
这似乎可行,因为我在服务器上获得了一个大小合适的文件.
This seems to work, in that I get a file on the server of the right size.
1) 我如何流式传输它,而不是先将其加载到内存中?我将上传非常大的文件.
1) How do I stream it, rather than load it into memory first? I will be uploading very large files.
为了下载我有
using (WebClient client = new WebClient())
{
string HtmlResult = String.Empty;
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(remoteFile);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.EnableSsl = false;
request.Credentials = new NetworkCredential(MyLogin, MyPassword);
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseStream))
using (FileStream writer = new FileStream(localFilename, FileMode.Create))
{
long length = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[2048];
readCount = responseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
writer.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, bufferSize);
}
}
}
2) 一切似乎都正常...除了当我尝试解压缩下载的 ZIP 文件时,我得到一个无效的 ZIP 文件.
2) Everything seems to work ... except when I try to unzip the downloaded ZIP file I get an invalid ZIP file.
使用 .NET 框架将二进制文件上传到 FTP 服务器的最简单的方法是使用 WebClient.UploadFile:
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile(
"ftp://ftp.example.com/remote/path/file.zip", @"C:localpathfile.zip");
如果您需要更好的控制,WebClient 不提供(例如 TLS/SSL 加密,ascii/text 传输模式,传输恢复等),使用 FtpWebRequest.简单的方法是使用 FileStream 复制到 FTP 流rel="nofollow noreferrer">Stream.CopyTo:
If you need a greater control, that WebClient does not offer (like TLS/SSL encryption, ascii/text transfer mode, transfer resuming, etc), use FtpWebRequest. Easy way is to just copy a FileStream to FTP stream using Stream.CopyTo:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream fileStream = File.OpenRead(@"C:localpathfile.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
fileStream.CopyTo(ftpStream);
}
如果你需要监控一个上传进度,你必须自己分块复制内容:
If you need to monitor an upload progress, you have to copy the contents by chunks yourself:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile;
using (Stream fileStream = File.OpenRead(@"C:localpathfile.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
byte[] buffer = new byte[10240];
int read;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
ftpStream.Write(buffer, 0, read);
Console.WriteLine("Uploaded {0} bytes", fileStream.Position);
}
}
GUI进度(WinForms ProgressBar)见:
如何使用 FtpWebRequest 显示上传进度条
For GUI progress (WinForms ProgressBar), see:
How can we show progress bar for upload with FtpWebRequest
如果要上传文件夹中的所有文件,请参阅
C#递归上传到FTP服务器.
If you want to upload all files from a folder, see
Recursive upload to FTP server in C#.
使用 .NET 框架从 FTP 服务器下载二进制文件最简单的方法是使用 WebClient.DownloadFile:
The most trivial way to download a binary file from an FTP server using .NET framework is using WebClient.DownloadFile:
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.DownloadFile(
"ftp://ftp.example.com/remote/path/file.zip", @"C:localpathfile.zip");
如果您需要更好的控制,WebClient 不提供(例如 TLS/SSL 加密,ascii/text 传输模式,恢复传输等),使用FtpWebRequest.简单的方法是使用 FileStream" rel="nofollow noreferrer">Stream.CopyTo:
If you need a greater control, that WebClient does not offer (like TLS/SSL encryption, ascii/text transfer mode, resuming transfers, etc), use FtpWebRequest. Easy way is to just copy an FTP response stream to FileStream using Stream.CopyTo:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.DownloadFile;
using (Stream ftpStream = request.GetResponse().GetResponseStream())
using (Stream fileStream = File.Create(@"C:localpathfile.zip"))
{
ftpStream.CopyTo(fileStream);
}
如果你需要监控下载进度,你必须自己分块复制内容:
If you need to monitor a download progress, you have to copy the contents by chunks yourself:
FtpWebRequest request =
(FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.DownloadFile;
using (Stream ftpStream = request.GetResponse().GetResponseStream())
using (Stream fileStream = File.Create(@"C:localpathfile.zip"))
{
byte[] buffer = new byte[10240];
int read;
while ((read = ftpStream.Read(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, read);
Console.WriteLine("Downloaded {0} bytes", fileStream.Position);
}
}
GUI进度(WinForms ProgressBar)见:
FtpWebRequest FTP 下载进度条
For GUI progress (WinForms ProgressBar), see:
FtpWebRequest FTP download with ProgressBar
如果您想从远程文件夹下载所有文件,请参阅
C#通过FTP下载所有文件和子目录.
If you want to download all files from a remote folder, see
C# Download all files and subdirectories through FTP.
这篇关于在 C#/.NET 中向/从 FTP 服务器上传和下载文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
ASP.NET Core 使用 Azure Active Directory 进行身份验证并ASP.NET Core authenticating with Azure Active Directory and persisting custom Claims across requests(ASP.NET Core 使用 Azure Active Directory 进行身
ASP.NET Core 2.0 Web API Azure Ad v2 令牌授权不起作用ASP.NET Core 2.0 Web API Azure Ad v2 Token Authorization not working(ASP.NET Core 2.0 Web API Azure Ad v2 令牌授权不起作用)
ASP Core Azure Active Directory 登录使用角色ASP Core Azure Active Directory Login use roles(ASP Core Azure Active Directory 登录使用角色)
如何获取守护进程或服务器到 C# ASP.NET Web API 的How do I get Azure AD OAuth2 Access Token and Refresh token for Daemon or Server to C# ASP.NET Web API(如何获取守护进程或服务器到 C# ASP.N
.Net Core 2.0 - 获取 AAD 访问令牌以与 Microsoft Graph.Net Core 2.0 - Get AAD access token to use with Microsoft Graph(.Net Core 2.0 - 获取 AAD 访问令牌以与 Microsoft Graph 一起使用)
异步调用时 Azure KeyVault Active Directory AcquireTokenAAzure KeyVault Active Directory AcquireTokenAsync timeout when called asynchronously(异步调用时 Azure KeyVault Active Directory AcquireTokenAsync 超