C#(99):FtpWebRequest与FtpWebResponse完成FTP操作
一、WebRequestMethods.Ftp类:
表示可与 FTP 请求一起使用的 FTP 协议方法的类型。
- AppendFile : 表示要用于将文件追加到 FTP 服务器上的现有文件的 FTP APPE 协议方法。
- DeleteFile :表示要用于删除 FTP 服务器上的文件的 FTP DELE 协议方法。
- DownloadFile :表示要用于从 FTP 服务器下载文件的 FTP RETR 协议方法。
- GetDateTimestamp :表示要用于从 FTP 服务器上的文件检索日期时间戳的 FTP MDTM 协议方法。
- GetFileSize :表示要用于检索 FTP 服务器上的文件大小的 FTP SIZE 协议方法。
- ListDirectory :表示获取 FTP 服务器上的文件的简短列表的 FTP NLIST 协议方法。
- ListDirectoryDetails :表示获取 FTP 服务器上的文件的详细列表的 FTP LIST 协议方法。
- MakeDirectory :表示在 FTP 服务器上创建目录的 FTP MKD 协议方法。
- PrintWorkingDirectory :表示打印当前工作目录的名称的 FTP PWD 协议方法。
- RemoveDirectory :表示移除目录的 FTP RMD 协议方法。
- Rename :表示重命名目录的 FTP RENAME 协议方法。
- UploadFile :表示将文件上载到 FTP 服务器的 FTP STOR 协议方法。
- UploadFileWithUniqueName :表示将具有唯一名称的文件上载到 FTP 服务器的 FTP STOU 协议方法。
二、上传文件:
OpenFileDialog opFilDlg = new OpenFileDialog(); if (opFilDlg.ShowDialog() == DialogResult.OK) { ftp = new YBBFTPClass("hz.a.cn", "", "csp", "welcome", 0); ftp.UploadFile(opFilDlg.FileName); MessageBox.Show("上传成功"); }
/// <summary> /// 文件上传 /// </summary> /// <param name="filename">本地文件路径</param> public void UploadFile(string filename) { FileInfo fileInf = new FileInfo(filename); string uri = "ftp://" + RemoteHost + "/" + fileInf.Name; FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileInf.Name));// 根据uri创建FtpWebRequest对象 reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass); // ftp用户名和密码 reqFTP.KeepAlive = false; // 默认为true,连接不会被关闭, 在一个命令之后被执行 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定执行什么命令 reqFTP.UseBinary = true; // 指定数据传输类型 reqFTP.ContentLength = fileInf.Length; // 上传文件时通知服务器文件的大小 int contentLen; FileStream fileStream = fileInf.OpenRead(); // 打开一个文件读取内容到fileStream中 contentLen = fileStream.Read(buffer, 0, buffer.Length); ;//从fileStream读取数据到buffer中 Stream requestStream = reqFTP.GetRequestStream(); // 流内容没有结束 while (contentLen != 0) { requestStream.Write(buffer, 0, contentLen);// 把内容从buffer 写入 requestStream中,完成上传。 contentLen = fileStream.Read(buffer, 0, buffer.Length); } // 关闭两个流 requestStream.Close(); //uploadResponse = (FtpWebResponse)reqFTP.GetResponse(); fileStream.Close(); }
三、下载文件
1、核心代码
/// <summary> /// 下载文件 /// </summary> /// <param name="filePath">本地目录</param> /// <param name="fileName">远程路径</param> public void DownloadFile(string filePath, string fileName) { FtpWebRequest reqFTP; try { FileStream fileStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream responseStream = response.GetResponseStream();//从ftp响应中获得响应流 //long cl = response.ContentLength; byte[] buffer = new byte[1024]; int readCount; readCount = responseStream.Read(buffer, 0, buffer.Length);//从ftp的responseStream读取数据到buffer中 while (readCount > 0) { fileStream.Write(buffer, 0, readCount);//从buffer读取数据到fileStream中,完成下载 readCount = responseStream.Read(buffer, 0, buffer.Length); } responseStream.Close(); fileStream.Close(); response.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
2、winform:、
FolderBrowserDialog fldDlg = new FolderBrowserDialog(); if (txtUpload.Text.Trim().Length > 0) { if (fldDlg.ShowDialog() == DialogResult.OK) { ftp.DownloadFile(fldDlg.SelectedPath, txtUpload.Text.Trim()); MessageBox.Show("下载成功"); } } else { MessageBox.Show("Please enter the File name to download"); }
3、webform弹出下载提示:
FtpClient _client = new FtpClient(); Stream stream = _client.OpenRead(FtpFilePath, FtpDataType.Binary); string FtpFilePath = Request.QueryString["FilePath"]; string _fname = Path.GetFileName(FtpFilePath); Response.ContentType = "application/" + _fname.Split('.')[1]; Response.AddHeader("Content-disposition", "attachment; filename=" + _fname); byte[] buffer = new byte[10240]; int readCount; do { readCount = stream.Read(buffer, 0, buffer.Length); Response.OutputStream.Write(buffer, 0, readCount);//持续写入流 } while (readCount != 0); Response.OutputStream.Write(buffer, 0, buffer.Length); Response.End();
四、删除文件
string uri = "ftp://" + RemoteHost + "/" + fileName; FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileName)); reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass); reqFTP.KeepAlive = false; reqFTP.Method = WebRequestMethods.Ftp.DeleteFile; string result = String.Empty; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); long size = response.ContentLength; Stream datastream = response.GetResponseStream(); StreamReader sr = new StreamReader(datastream); result = sr.ReadToEnd(); sr.Close(); datastream.Close(); response.Close();
完整代码参考:
posted on 2018-12-20 14:30 springsnow 阅读(7713) 评论(0) 编辑 收藏 举报