C#:ftp上传成功,但下载的文件已损坏



我正在使用下面的代码将zip文件上传到我的ftp服务器:

string zipPath = @"d:filesstart.zip";
string ftpPath = ("ftp://######/start.zip");

WebRequest request = WebRequest.Create(ftpPath);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("######", "######");
StreamReader sourceStream = new StreamReader(zipPath);
byte[] fileContents = Encoding.Unicode.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
try
{
    Stream requestStream = request.GetRequestStream();
    requestStream.Write(fileContents, 0, fileContents.Length);
    requestStream.Close();
    FtpWebResponse makeFileUploadResponse = (FtpWebResponse)request.GetResponse();
}
catch
{
    MessageBox.Show("ftp failed!");
}

我的zip档案肯定是有效的(我可以打开它并提取它),但当我下载上传的zip文件时,我得到了档案损坏的错误。

更新1:我的源代码来自MSDN文章:如何:使用FTP 上传文件

您应该将请求强制转换为FtpWebRequest(如MSDN示例中所示)然后将请求指定为二进制(您上传的是二进制文件,而不是文本)。

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("aa");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = true;

我不能说问题出在哪里,但我可以提供另一种解决方案。您可以使用WebClient而不是WebRequest

string zipPath = @"d:filesstart.zip";
string ftpPath = ("ftp://######/start.zip");
WebClient ftpClient = new WebClient();
ftpClient.Credentials = new NetworkCredential("####", "######");
try{
    ftpClient.UploadFile(ftpPath, WebRequestMethods.Ftp.AppendFile, zipPath);
}
catch(WebException ex){
    MessageBox.Show("ftp failed");
}

最新更新