2015-01-06 4 views
0

ftans 서버에서 파일 업로드 및 업로드 (예 : ) 작업을 수행하기 위해 commans.net api를 사용하고 있습니다. 해당 작업을 수행 할 수 있지만 성공적으로 다운로드 한 파일이 손상되었습니다. 나는 보통의 방식으로 그 파일들을 열 수 없었다. .. 좀 도와주세요JAVA Commons-Net FTPClient 파일 다운로드가 손상되었습니다.

public class FTPConnect { 

public static void main(String[] args) { 
    startServer(); 

    connectClient(); 

} 

private static void startServer() { 

    FtpServerFactory serverFactory = new FtpServerFactory(); 

    ListenerFactory factory = new ListenerFactory(); 
    factory.setPort(21);// set the port of the listener (choose your desired 
         // port, not 1234) 
    System.out.println("port has been set to 21"); 
    serverFactory.addListener("default", factory.createListener()); 
    PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory(); 
    userManagerFactory.setFile(new File("lib/users.properties")); 

    System.out.println("users.properties has been set.."); 
    userManagerFactory.setPasswordEncryptor(new PasswordEncryptor() { 

       @Override 
       public String encrypt(String password) { 
        return password; 
       } 

       @Override 
       public boolean matches(String passwordToCheck, 
         String storedPassword) { 
        return passwordToCheck.equals(storedPassword); 
       } 
      }); 
    System.out.println("password has been encrypted..."); 
    BaseUser user = new BaseUser(); 
    user.setName("java"); 
    user.setPassword("shiva.dave"); 
    System.out.println("password has been set..to java and shiva.dave"); 
    user.setHomeDirectory("lib"); 
    System.out.println("home directory has been set..."); 
    List<Authority> authorities = new ArrayList<Authority>(); 
    authorities.add(new WritePermission()); 
    user.setAuthorities(authorities); 
    UserManager um = userManagerFactory.createUserManager(); 
    try { 
     um.save(user);// Save the user to the user list on the filesystem 
     System.out.println("user has been set to the filesystem.."); 
    } catch (FtpException e1) { 
     e1.printStackTrace(); 
    } 
    serverFactory.setUserManager(um); 
    FtpServer server = serverFactory.createServer(); 
    try 
    { 
     server.start();//Your FTP server starts listening for incoming FTP-connections, using the configuration options previously set 
     System.out.println("Server has been started....."); 
    } 
    catch (FtpException ex) 
    { 
     ex.printStackTrace(); 
    } 

} 

private static void connectClient() { 

    FTPClient client = new FTPClient(); 
    try{ 
     client.connect(InetAddress.getLocalHost(), 21); 
     String loging_success = client.login("java", "shiva.dave") == true ? "success" : "failed"; 
     System.out.println("login: " + loging_success); 
     FTPFile[] clients = client.listFiles("/"); 
     System.out.println("Listed " + clients.length + " files."); 
     for (FTPFile file : clients) { 
      System.out.println(file.getName()); 
     } 

     for (FTPFile ftpFile : clients) { 
      String remoteFile2 = ftpFile.getName(); 
      File downloadFile2 = new File("D:/test2/"+ftpFile.getName()); 
      OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile2)); 
      InputStream inputStream = client.retrieveFileStream(remoteFile2); 
      byte[] bytesArray = new byte[4096]; 
      int bytesRead = -1; 
      while ((bytesRead = inputStream.read(bytesArray)) != -1) { 
       outputStream2.write(bytesArray, 0, bytesRead); 
      } 

      boolean success = client.completePendingCommand(); 
      if (success) { 
       System.out.println("File #2 has been downloaded successfully."); 
      } 
      outputStream2.close(); 
      inputStream.close(); 
     } 

    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    finally{ 
     try{ 
      client.logout(); 
      client.disconnect(); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

} 
} 

답변

3

나는 해결책을 설립하고 여기에 데려 가고 싶다는 ... FTP 서버에서 파일을 다운로드하려고 할 때 우선처럼 내 간단한 코드보기 당신 파일을 성공적으로 다운로드하려면 파일 형식과 전송 모드를 지정해야합니다.

여기에 삽입해야하는 코드가 있습니다.

client.setFileType (FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE); client.setFileTransferMode (FTP.BINARY_FILE_TYPE);

이 답변

그렇지 않으면 당신은 성공적으로 파일을 다운로드 할 수 없을 것입니다 당신이 후 성공적으로 로그인 코드의 두 라인을 삽입해야합니다

...

희망을 "남자를 조심해" 손상되지 않고 파일을 다운로드하는 데 도움이됩니다.

+0

다음은 모든 파일 형식과 모드를 확인하는 문서입니다. https://commons.apache.org/proper/commons-net/apidocs/constant-values.html # org.apache.commons.net.ftp.FTP.RECORD_STRUCTURE –

관련 문제