首先利用pure-ftpd在Docker中,快速建立简易型FTP。
不知如何安装Docker,可以参考这篇。
安装指令:
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e FTP_USER_HOME=/home/bob -e FTP_USER_NAME=bob -e FTP_USER_PASS=12345 -e "PUBLICHOST=localhost" stilliard/pure-ftpd
开启档案总管,在位址栏输入ftp://localhost/
后进入。
跳出对话视窗要求输入安装指令设定的帐号/密码。
下载档案:
建立一个txt,内容:成功接收自FTP回传的资料流字元。
手动丢到FTP,此时FTP就会有档案了:
Program.cs
var fileName = "test.txt";// 建立跟FTP沟通的物件FtpWebRequest request = (FtpWebRequest)WebRequest.Create($"ftp://localhost/{fileName}");request.Method = WebRequestMethods.Ftp.DownloadFile; // 输入帐号/密码登入FTP. request.Credentials = new NetworkCredential("bob", "12345");//建立物件接收FTP的回应FtpWebResponse response = (FtpWebResponse)request.GetResponse();//建立物件接收从FTP回应的资料流Stream responseStream = response.GetResponseStream();//建立物件读取资料流的字元StreamReader reader = new StreamReader(responseStream);Console.WriteLine(reader.ReadToEnd());reader.Close();response.Close();
执行结果:
上传档案:
Program.cs
//欲建立在FTP的档案名称var fileName = "test.txt";FtpWebRequest request = (FtpWebRequest)WebRequest.Create($"ftp://localhost/{fileName}");request.Method = WebRequestMethods.Ftp.UploadFile;request.Credentials = new NetworkCredential("bob", "12345");byte[] fileContents;//建立StreamReader物件读取实体档案,并转成byte阵列using (StreamReader sourceStream = new StreamReader(@"C:\test.txt")){ fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());}request.ContentLength = fileContents.Length;//将byte阵列写入Stream资料流using (Stream requestStream = request.GetRequestStream()){ requestStream.Write(fileContents, 0, fileContents.Length);}//建立FtpWebResponse物件接收从FTP回应的资料流using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()){ Console.WriteLine($"Upload File Complete, status {response.StatusDescription}");}
执行结果:
此时的FTP会多一个test1.txt:
参考资料:
How to: Download files with FTP | Microsoft Docs
How to: Upload files with FTP | Microsoft Docs