猿问

在C#/。NET中向FTP服务器上载二进制文件或从FTP服务器下载二进制文件

我正在使用.NET 4 C#。我正在尝试上传ZIP文件,然后将其下载到(我的)服务器。


对于上传我有


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();

}

这似乎可行,因为我在服务器上获得了正确大小的文件。


1)我如何流式传输它,而不是先将其加载到内存中?我将上传非常大的文件。


对于下载,我有


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文件。


撒科打诨
浏览 368回答 1
1回答
随时随地看视频慕课网APP
我要回答