2013-03-02 99 views
0

我使用以下代码将xml文件上载到服务器中的目录/ home/domainname/public_html/guest。但是,该文件仅上传到位置/ home/domainname。它不会上传到子目录。请指教。apache.commons.net.ftp.FTPClient没有将文件上传到所需文件夹

FTPClient client = new FTPClient(); FileInputStream fis = null;

try { 
     client.connect(Util.getProductsXMLFTPServer()); 
     client.login(Util.getProductsXMLFTPUser(), Util.getProductsXMLFTPPassword()); 

     // 
     // Create an InputStream of the file to be uploaded 
     // 

     fis = new FileInputStream(new File(Util.getProductsXMLFTPInputFilePath(), Util.getProductsXMLFTPOutputFileName())); 
     client.changeWorkingDirectory(Util.getProductsXMLFTPUploadPath()); 


     client.storeFile(Util.getProductsXMLFTPOutputFileName(), fis); 
     client.logout(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (fis != null) { 
       fis.close(); 
      } 
      client.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

回答

2

我检查了你的代码,它的工作原理。我只将文件类型声明更改为二进制文件,这对于XML文件可能不需要。 这里是我完整的代码以供参考:

package apachenet.ftp; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 

import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 

public class App { 
    public static void main(String[] args) { 
     FTPClient client = new FTPClient(); 
     FileInputStream fis = null; 
     try { 
      client.connect(/*Util.getProductsXMLFTPServer()*/"127.0.0.1"); 
      client.login(/*Util.getProductsXMLFTPUser()*/"pwyrwinski", 
        /*Util.getProductsXMLFTPPassword()*/"secret"); 
      client.setFileType(FTP.BINARY_FILE_TYPE); // optional 
      fis = new FileInputStream(
        new File(/* Util.getProductsXMLFTPInputFilePath() */"/home/pwyrwinski", 
          /* Util.getProductsXMLFTPOutputFileName() */"img.png")); 
      client.changeWorkingDirectory(/*Util.getProductsXMLFTPUploadPath()*/ "someDir"); 


      client.storeFile(/*Util.getProductsXMLFTPOutputFileName()*/"img_bis.png", fis); 
      client.logout(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (fis != null) { 
        fis.close(); 
       } 
       client.disconnect(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

正如你可以看到它的大致一样的你。 Util类调​​用被替换为原始数据。

当我运行它时,文件/home/pwyrwinski/img.png上传到ftp服务器上的{FTP_USER_ROOT}/someDir目录,名称更改为img_bis.png。我认为这正是你想达到的目标。

让我们回到你的问题。

  1. 尝试检查从 Util.getProductsXMLFTPUploadPath()返回的内容。我的猜测并不是你期待的 - 所以在你的IDE中进行调试或者打印到控制台。
  2. 检查从Util.getProductsXMLFTPUploadPath()返回的路径 调用以斜杠开始,它不应该。

更新1. 是否猪病/home/domainname/public_html/guest服务器上存在吗?

添加下面的方法到类:

private static void showServerReply(FTPClient ftpClient) { 
    String[] replies = ftpClient.getReplyStrings(); 
    if (replies != null && replies.length > 0) { 
     for (String aReply : replies) { 
      System.out.println("SERVER: " + aReply); 
     } 
    } 
} 

FTP客户端的方法调用调用它。这将为您提供每个命令结果的代码和说明。我怀疑client.changeWorkingDirectory(...)以错误结尾,可能是:550 Permission Denied (or No such file or folder)

下一页修改为:

client.login(Util.getProductsXMLFTPUser(), Util.getProductsXMLFTPPassword()); 
System.out.println(client.printWorkingDirectory()); // added this line! 

这将告诉我们什么是在登录后,当前的工作目录

请发表您的结果。

+0

我验证了路径。这是正确的。我尝试删除“/”,但它仍然是一样的。不要超出我提到的目录。 – 2013-03-03 02:05:15

+0

我已更新我的文章(更新1)。 – 2013-03-03 03:04:23

+1

非常感谢。这对我帮助很大。我将参数更改为“public_html/guest”而不是“/ home/domainuser/public_html/guest”。似乎它试图从当前位置查找完整的目录路径。它给了我一个错误消息,说目录不存在。再次感谢。它像魔术一样工作。 – 2013-03-08 05:55:59

1
FTPClient ftpClient = new FTPClient(); 
     try { 
       System.out.println("before server connection"); 
      ftpClient.connect(server, port); 
      System.out.println("before user name and passwod"); 
      ftpClient.login(user, pass); 
      ftpClient.enterLocalActiveMode(); 

      ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 

      System.out.println("connection sucess"); 


      // windows working fine 
      File secondLocalFile = new File("/home/aims/archived_reports/tes_S_000000123/test.pdf"); 
//   String secondRemoteFile = "/archived_reports/PermanentRecord.pdf"; 

//linux 
      // File secondLocalFile = new File("/archived_reports/tes_S_000009123/test.pdf"); 

      String secondRemoteFile = "remotefilename.pdf"; 
      InputStream inputStream = new FileInputStream(secondLocalFile); 

      System.out.println("Start uploading second file"); 

        ftpClient.changeWorkingDirectory("/reports");// home/ftp.test/reports folder 


      System.out.println("Prasent Working Directory :"+ftpClient.printWorkingDirectory()); 


      OutputStream outputStream = ftpClient.storeFileStream(secondRemoteFile); 
       int returnCode = ftpClient.getReplyCode(); 
       System.out.println(returnCode); 
      byte[] bytesIn = new byte[4096]; 
      int read = 1; 

      while ((read = inputStream.read(bytesIn)) != -1) { 
       outputStream.write(bytesIn, 0, read); 
      } 

System.out.println();   
      inputStream.close(); 
      outputStream.close(); 
        boolean completed = ftpClient.completePendingCommand(); 
      if (completed) { 
       System.out.println("The second file is uploaded successfully."); 
      } 
相关问题