博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FTP上传下载类
阅读量:5019 次
发布时间:2019-06-12

本文共 5588 字,大约阅读时间需要 18 分钟。

public class FtpOperation    {        public static void UploadFile(FileInfo fileinfo, string targetDir, string hostname, string username, string password, string reName)        {            //1. check target            string target;            if (targetDir.Trim() == "")            {                return;            }            target = Guid.NewGuid().ToString(); //使用临时文件名            string URI = "FTP://" + hostname + "/" + targetDir + "/" + target;            ///WebClient webcl = new WebClient();            System.Net.FtpWebRequest ftp = GetRequest(URI, username, password);            //设置FTP命令 设置所要执行的FTP命令,            //ftp.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;//假设此处为显示指定路径下的文件列表            ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;            //指定文件传输的数据类型            ftp.UseBinary = true;            ftp.UsePassive = true;            //告诉ftp文件大小            ftp.ContentLength = fileinfo.Length;            //缓冲大小设置为2KB            const int BufferSize = 2048;            byte[] content = new byte[BufferSize - 1 + 1];            int dataRead;            //打开一个文件流 (System.IO.FileStream) 去读上传的文件            using (FileStream fs = fileinfo.OpenRead())            {                try                {                    //把上传的文件写入流                    using (Stream rs = ftp.GetRequestStream())                    {                        do                        {                            //每次读文件流的2KB                            dataRead = fs.Read(content, 0, BufferSize);                            rs.Write(content, 0, dataRead);                        } while (!(dataRead < BufferSize));                        rs.Close();                    }                }                catch (Exception ex) { }                finally                {                    fs.Close();                }            }            ftp = null;            //设置FTP命令            ftp = GetRequest(URI, username, password);            ftp.Method = System.Net.WebRequestMethods.Ftp.Rename; //改名            ftp.RenameTo = reName;            //ftp.RenameTo = fileinfo.Name;            try            {                ftp.GetResponse();            }            catch (Exception ex)            {                ftp = GetRequest(URI, username, password);                ftp.Method = System.Net.WebRequestMethods.Ftp.DeleteFile; //删除                ftp.GetResponse();                throw ex;            }            finally            {                //fileinfo.Delete();            }            // 可以记录一个日志 "上传" + fileinfo.FullName + "上传到" + "FTP://" + hostname + "/" + targetDir + "/" + fileinfo.Name + "成功." );            ftp = null;            #region            /******FtpWebResponse* ****/            //FtpWebResponse ftpWebResponse = (FtpWebResponse)ftp.GetResponse();            #endregion        }        public static  void Download(string filePath, string fileName, string ftpServerIP, string ftpUser, string ftpPwd)        {            FtpWebRequest reqFTP;            try            {                //filePath = <
>, //fileName = <
> FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create); reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); long cl = response.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = ftpStream.Read(buffer, 0, bufferSize); while (readCount > 0) { outputStream.Write(buffer, 0, readCount); readCount = ftpStream.Read(buffer, 0, bufferSize); } ftpStream.Close(); outputStream.Close(); response.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } public static string GetStringResponse(FtpWebRequest ftp) { //Get the result, streaming to a string string result = ""; using (FtpWebResponse response = (FtpWebResponse)ftp.GetResponse()) { long size = response.ContentLength; using (Stream datastream = response.GetResponseStream()) { using (StreamReader sr = new StreamReader(datastream, System.Text.Encoding.Default)) { result = sr.ReadToEnd(); sr.Close(); } datastream.Close(); } response.Close(); } return result; } public static FtpWebRequest GetRequest(string URI, string username, string password) { //根据服务器信息FtpWebRequest创建类的对象 FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI); //提供身份验证信息 result.Credentials = new System.Net.NetworkCredential(username, password); //设置请求完成之后是否保持到FTP服务器的控制连接,默认值为true result.KeepAlive = true; return result; } }

 

转载于:https://www.cnblogs.com/armanda/p/3491893.html

你可能感兴趣的文章
git常见问题
查看>>
.NETFramework:template
查看>>
HM16.0之帧内模式——xCheckRDCostIntra()函数
查看>>
Jmeter性能测试 入门
查看>>
安卓动画有哪几种?他们的区别?
查看>>
Nodejs学习总结 -Express入门(一)
查看>>
web前端优化
查看>>
ssh 连接原理及ssh-keygen
查看>>
vs2013编译qt程序后中文出现乱码
查看>>
【转】IOS数据库操作SQLite3使用详解
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
设计网站大全
查看>>
JVM CUP占用率过高排除方法,windows环境
查看>>
【转】JAVA字符串格式化-String.format()的使用
查看>>
【转】ButterKnife基本使用--不错
查看>>
【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”...
查看>>
函数中关于const关键字使用的注意事项
查看>>
微信架构(转)
查看>>
Web项目中的路径问题
查看>>
js随机数的取整
查看>>