在ftp上传文件

我想将文件从一个服务器上传到另一个ftp服务器,以下是我上传文件的代码,但是它会抛出一个错误:{“远程服务器返回错误:(550)文件不可用(例如,找不到文件,没有访问)。”}

这是我的代码:

string CompleteDPath = "ftp URL"; string UName = "UserName"; string PWD = "Password"; WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName); reqObj.Method = WebRequestMethods.Ftp.UploadFile; reqObj.Credentials = new NetworkCredential(UName, PWD); FileStream streamObj = System.IO.File.OpenRead(Server.MapPath(FileName)); byte[] buffer = new byte[streamObj.Length + 1]; streamObj.Read(buffer, 0, buffer.Length); streamObj.Close(); streamObj = null; reqObj.GetRequestStream().Write(buffer, 0, buffer.Length); reqObj = null; 

你能告诉我哪里出错了吗?

请确保您的ftp路径设置如下所示。

 string CompleteDPath = "ftp://www.example.com/wwwroot/videos/"; string FileName = "sample.mp4"; WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName); 

以下脚本非常适合我通过ftp将文件和video上传到另一台服务器。

 FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(ftpurl + "" + username + "_" + filename); ftpClient.Credentials = new System.Net.NetworkCredential(ftpusername, ftppassword); ftpClient.Method = System.Net.WebRequestMethods.Ftp.UploadFile; ftpClient.UseBinary = true; ftpClient.KeepAlive = true; System.IO.FileInfo fi = new System.IO.FileInfo(fileurl); ftpClient.ContentLength = fi.Length; byte[] buffer = new byte[4097]; int bytes = 0; int total_bytes = (int)fi.Length; System.IO.FileStream fs = fi.OpenRead(); System.IO.Stream rs = ftpClient.GetRequestStream(); while (total_bytes > 0) { bytes = fs.Read(buffer, 0, buffer.Length); rs.Write(buffer, 0, bytes); total_bytes = total_bytes - bytes; } //fs.Flush(); fs.Close(); rs.Close(); FtpWebResponse uploadResponse = (FtpWebResponse)ftpClient.GetResponse(); value = uploadResponse.StatusDescription; uploadResponse.Close(); 

以下是在FTP服务器上上传文件的示例代码

  string filename = Server.MapPath("file1.txt"); string ftpServerIP = "ftp.demo.com/"; string ftpUserName = "dummy"; string ftpPassword = "dummy"; FileInfo objFile = new FileInfo(filename); FtpWebRequest objFTPRequest; // Create FtpWebRequest object objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + objFile.Name)); // Set Credintials objFTPRequest.Credentials = new NetworkCredential(ftpUserName, ftpPassword); // By default KeepAlive is true, where the control connection is // not closed after a command is executed. objFTPRequest.KeepAlive = false; // Set the data transfer type. objFTPRequest.UseBinary = true; // Set content length objFTPRequest.ContentLength = objFile.Length; // Set request method objFTPRequest.Method = WebRequestMethods.Ftp.UploadFile; // Set buffer size int intBufferLength = 16 * 1024; byte[] objBuffer = new byte[intBufferLength]; // Opens a file to read FileStream objFileStream = objFile.OpenRead(); try { // Get Stream of the file Stream objStream = objFTPRequest.GetRequestStream(); int len = 0; while ((len = objFileStream.Read(objBuffer, 0, intBufferLength)) != 0) { // Write file Content objStream.Write(objBuffer, 0, len); } objStream.Close(); objFileStream.Close(); } catch (Exception ex) { throw ex; } 

您还可以使用更高级别的WebClient类型来使用更清晰的代码来执行FTP操作:

 using (WebClient client = new WebClient()) { client.Credentials = new NetworkCredential(ftpUsername, ftpPassword); client.UploadFile("ftp://ftpserver.com/target.zip", "STOR", localFilePath); } 

如果你仍然遇到问题,那么是什么让我超越了这一切。 我得到了同样的错误,尽管我可以在我试图上传的目录中完美地看到该文件 – 即:我覆盖了一个文件。

我的ftpurl看起来像:

 // ftp://www.mywebsite.com/testingdir/myData.xml FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.mywebsite.com/testingdir/myData.xml" 

所以,我的凭据使用我的测试人员用户名和PW;

 request.Credentials = new NetworkCredential ("tester", "testerpw"); 

好吧,我的“测试者”ftp帐户设置为“ ftp://www.mywebsite.com/testingdir ”,但当我实际上ftp [从资源管理器说]我刚刚输入“ ftp://www.mywebsite.com ”并且使用我的测试人员凭据登录并自动发送到“testingdir”。

所以,为了在C#中完成这项工作,我最后使用了url – ftp://www.mywebsite.com/myData.xml提供了我的测试人员帐户凭据,一切正常。

  public void UploadImageToftp() { string server = "ftp://111.61.28.128/Example/"; //server path string name = @"E:\Apache\htdocs\visa\image.png"; //image path string Imagename= Path.GetFileName(name); FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(string.Format("{0}{1}", server, Imagename))); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential("username", "password"); Stream ftpStream = request.GetRequestStream(); FileStream fs = File.OpenRead(name); byte[] buffer = new byte[1024]; int byteRead = 0; do { byteRead = fs.Read(buffer, 0, 1024); ftpStream.Write(buffer, 0, byteRead); } while (byteRead != 0); fs.Close(); ftpStream.Close(); MessageBox.Show("Image Upload successfully!!"); }